Maxim
Я, кстати, тоже не понимаю
Ivan
KosBeg
*g++
Evgenii
Tom
Igor
Igor
Maxim
Ну, я могу понять (&$ <&_), но два раза && зачем?
Александр
&& - оператор взятия адреса метки в gcc
Maxim
Круть
Maxim
Спасибо
Tengiz
Привет! Вопрос про type trait для generic lambda (lambda с auto)
Можно ли сделать type trait чтобы отличить generic lambda с разным количество параметров?
Например, мне хотелось бы уметь отличать
auto f1 = [&]{ \* code *\ };
от
auto f2 = [&](const auto& arg){ \* code \* };
и от
auto f3 = [&](bool flag, const auto& arg){ \* code \* };
Tengiz
Для обычных lambda это можно делать например с помощью std::result_of или с помощью declval
Vladislav
Tengiz
Обычную лямбду я имею ввиду
[](int arg){};
, т.е. там где тип уже есть.
Vladislav
я понимаю, но как с помощью result_of понять количество аргументов, не зная конкретные типы?
Tengiz
как-нибудь так -
template<typename T, typename R = typename std::result_of<T(bool)>::type>
Tengiz
где T это лямда
Tengiz
а количество наверное никак
Evgenii
Aidar
Vladislav
Tengiz
Собственно количество параметров узнать не так важно. Хотелось бы уметь отличать f1 от f2 и от f3
Tengiz
Evgenii
🐙 Antony
Вот так попробуйте https://github.com/boostorg/callable_traits
🐙 Antony
документация вот тут http://boostorg.github.io/callable_traits/doc/html/index.html
🐙 Antony
* сам не смотрел, но подозреваю что умеет
Vladislav
Evgenii
Vladislav
да
Tengiz
Aidar
лол
Vladislav
Tengiz
Tengiz
Библиотека любопытная, но большенство необходимых type traits не поддерживают generic lambda
Constantine
Хм... наверное можно сделать тип, который вообще ни к чему не приводится, и если в лямбду подставилось - точно шаблонный
Vladislav
Aidar
Constantine
Типа enable_if обойдет?
Aidar
тебе кажись хватит
Aidar
Aidar
можно было обойтись decltype от вызова
Constantine
да не работает
[](auto argument) -> decltype(argument::return_type)
Vladislav
но оно и так через result_of легко делается, по идее
Tengiz
Увы, в проекте нет C++17
Aidar
Увы, в проекте нет C++17
template <typename Func>
auto test(Func f) -> decltype(f(std::declval<bool>())) {
return f(true);
}
int main() {
auto asdasd = [](auto aa) { return aa; };
test(asdasd);
}
Tengiz
Evgenii
A Type Sanitizer (LLVM) https://reviews.llvm.org/D32198
Tom
Ок, спасибо буду пробовать
https://godbolt.org/g/wxaEk3
Штука есть такая — detection idiom. С помощью нее удобно такие вещи писать.
Ioann_
Ребята, беда такая: есть QTreeWidget, и туда ставлю свои виджеты, наследованные от QWidget. Далее, рисую в вьпорте QTreeWidget, все рисуется, но вот рисуется именно что в дереве виджетов, а на кастомных виджета - нет ! То есть рисунок находится ЗА НИМИ ! Как его вывести вперед ?
Ioann_
Aleksandr
тебе нужно вручную отрисовать сначало элементы а потом поверх рисунок
Aleksandr
например в нашей любимой телеге так перерисовываю список контактов при наведении (ну несовсем так но смысл тот же)
Ioann_
Блин, а по другому никак ? Ну, даже так, а как перерисовать вот эти вот кнопочки раньше чем ... ? Их отрисовкой не я маюсь, а виджет, видимо
Ioann_
То есть я вызвал некий метод класса КуТриВиджет, который эти виджеты туда установил, вот и все... Дальше оно там как то само рисуется, и как этим управлять ???!
Ioann_
Можно конечно всякие ехал сигнал через сигнал видит сигнал и руку в сигнал написать, но черт побери я когда со своего движка уходил смотрел в сторону кути именно по причине того, что там много всего и все легко делается, но пока что не так... Да и ограничений много(в т.ч на вложенные классы)
Anatoly
Кури делегаты Qt
Ioann_
Anonymous
Кто чем занимается?)
Anonymous
Кто чем занимается?)
🦥Alex Fails
/rules
Vladislav
Vladislav
не надо флудить
Danil
кстати, а батлер умеет отправлять в RO?
🦥Alex Fails
да, но там мало опций пока что
Danil
просто мб явный шлак перманентом банить, а других на время в RO, образумиться
vladislav
Ребят, тупенький вопрос, на как правильно работать с таким кейсом? Есть некий дабл, есть некий процент, нужно взять процент от дабла и округлить полученное значение. Например double = 10.0, процент = 65%, берём 65% от 10, ожидаем получить 6.5, но на практике получаем 6.4999999, из-за чего округление неправильно работает, как в общем случае такие ситуации обрабатывать?
Dmitrii
Это не ошибка округления, а принципиальная проблема представления десятичных чисел в бинарной форме. Если ты знаешь, что тебе достаточно одного знака после запятой, то можешь просто печатать с точностью до одного знака — тогда произойдёт округление. Нужно знать больше о контексте твоей задаче, чтобы предложить более оптимальное решение.
🐙 Antony
https://habrahabr.ru/post/112953/
Dmitrii
👍🏼
ep
С decimal там ничего не планируется в стандарте?
vladislav