@ProCxx

Страница 1218 из 2477
Tengiz
16.08.2017
16:48:53
Привет! Вопрос про 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 \* };

Для обычных lambda это можно делать например с помощью std::result_of или с помощью declval

Tengiz
16.08.2017
16:52:09
Обычную лямбду я имею ввиду [](int arg){}; , т.е. там где тип уже есть.

Google
Vladislav
16.08.2017
16:53:26
я понимаю, но как с помощью result_of понять количество аргументов, не зная конкретные типы?

Tengiz
16.08.2017
16:54:06
как-нибудь так - template<typename T, typename R = typename std::result_of<T(bool)>::type>

где T это лямда

а количество наверное никак

Aidar
16.08.2017
16:56:11
Vladislav
16.08.2017
16:56:39
а количество наверное никак
ну вот и для generic так же

Tengiz
16.08.2017
16:57:33
Собственно количество параметров узнать не так важно. Хотелось бы уметь отличать f1 от f2 и от f3

Evgeniy
16.08.2017
16:58:44
А как это делать?
не покатит, потому что у тебя и в 2 и в 3 один auto

так не все параметры auto иногда
но можно просто заметить все типы на auto и легким движением рук превратить плюсы в питон

Google
Antony
16.08.2017
16:59:26
Вот так попробуйте https://github.com/boostorg/callable_traits

документация вот тут http://boostorg.github.io/callable_traits/doc/html/index.html

* сам не смотрел, но подозреваю что умеет

Evgeniy
16.08.2017
17:00:42
#include <auto> auto main(auto) { auto; }
универсальная программа?

Vladislav
16.08.2017
17:00:50
да

Tengiz
16.08.2017
17:00:58
Aidar
16.08.2017
17:01:05
лол

Alexander
16.08.2017
17:01:09
универсальная программа?
g++ —enable-universal-program main.cpp

Vladislav
16.08.2017
17:01:39
Tengiz
16.08.2017
17:01:58
Библиотека любопытная, но большенство необходимых type traits не поддерживают generic lambda

Constantine
16.08.2017
17:09:25
Хм... наверное можно сделать тип, который вообще ни к чему не приводится, и если в лямбду подставилось - точно шаблонный

Constantine
16.08.2017
17:10:24
Типа enable_if обойдет?

Tengiz
16.08.2017
17:11:17
тебе кажись хватит
Да, должно хватить

Aidar
16.08.2017
17:11:35
можно было обойтись decltype от вызова

Google
Constantine
16.08.2017
17:11:46
да не работает [](auto argument) -> decltype(argument::return_type)

Vladislav
16.08.2017
17:12:02
там есть is_invokable
is_invokable и в c++17 есть

но оно и так через result_of легко делается, по идее

Tengiz
16.08.2017
17:12:43
Увы, в проекте нет C++17

Aidar
16.08.2017
17:15:58
Увы, в проекте нет 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); }

Evgeniy
16.08.2017
17:17:37
A Type Sanitizer (LLVM) https://reviews.llvm.org/D32198

Tom
16.08.2017
17:24:05
Ок, спасибо буду пробовать
https://godbolt.org/g/wxaEk3 Штука есть такая — detection idiom. С помощью нее удобно такие вещи писать.

Ioann V
16.08.2017
17:25:13
Ребята, беда такая: есть QTreeWidget, и туда ставлю свои виджеты, наследованные от QWidget. Далее, рисую в вьпорте QTreeWidget, все рисуется, но вот рисуется именно что в дереве виджетов, а на кастомных виджета - нет ! То есть рисунок находится ЗА НИМИ ! Как его вывести вперед ?



Admin
ERROR: S client not available

Aleksandr
16.08.2017
17:26:26
тебе нужно вручную отрисовать сначало элементы а потом поверх рисунок

Aleksandr
16.08.2017
17:27:04
например в нашей любимой телеге так перерисовываю список контактов при наведении (ну несовсем так но смысл тот же)

Ioann V
16.08.2017
17:30:58
Блин, а по другому никак ? Ну, даже так, а как перерисовать вот эти вот кнопочки раньше чем ... ? Их отрисовкой не я маюсь, а виджет, видимо

То есть я вызвал некий метод класса КуТриВиджет, который эти виджеты туда установил, вот и все... Дальше оно там как то само рисуется, и как этим управлять ???!

Можно конечно всякие ехал сигнал через сигнал видит сигнал и руку в сигнал написать, но черт побери я когда со своего движка уходил смотрел в сторону кути именно по причине того, что там много всего и все легко делается, но пока что не так... Да и ограничений много(в т.ч на вложенные классы)

Anatoly
16.08.2017
17:54:43
Кури делегаты Qt

Ioann V
16.08.2017
18:00:12
Anton
16.08.2017
18:31:29
Кто чем занимается?)

Кто чем занимается?)

Google
Alex Фэils?︙
16.08.2017
18:32:16
/rules

Group Butler [beta]
16.08.2017
18:32:17
/rules
Правила 0. Язык чата — русский. The chat's language is Russian. 1. Простые вопросы (к примеру, о базовом синтаксисе языка, или от новичков в C/C++) , лабы, "помогите с задачкой" и о IDE — в чат новичков: https://telegram.me/joinchat/BYlFbD3eN3JMaG34hyh96w 2. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств (для этого есть pro.cxx.holywars — https://telegram.me/joinchat/BYlFbECi8UKU0bCqc7jWlQ и @flood); 2.0. Не поддавайтесь на провокации, а лучше репортите, написав в реплае @admin. 2.1. Не делайте ложных доносов на людей, и не "пингуйте" администраторов чата зря; 2.2. Не разводите срачи/холивары в этом чате. За разведение срача администрация банит без предупреждения; 3. Не надо оффтопить в этом чате и флудить (в частности не рекомендуется писать кучу мелких сообщений); 3.0. Не стоит злоупотреблять стикерами и (или) кидать их без всякой причины; 3.1. Голосовые сообщения в этом чате запрещены; 4. Вы можете спросить тематический чат, и вам, по возможности, его подскажут (также можно ввести команду #chatlist, и бот вам напишет списочек известных чатов) 5. Все вакансии, реклама и добавление своего чатика в списочек известных чатов — по согласованию с @AlexFails; 6. Нарушители сначала получают предупреждение, а затем, в случае рецидива, бан на срок от 1 дня до бесконечности. Все правила - /rules.

Vladislav
16.08.2017
18:35:51
Group Butler [beta]
16.08.2017
18:35:51
Anton has been warned (2/5)

Vladislav
16.08.2017
18:35:56
не надо флудить

Grigor
16.08.2017
18:36:52
кстати, а батлер умеет отправлять в RO?

Alex Фэils?︙
16.08.2017
18:37:12
да, но там мало опций пока что

Grigor
16.08.2017
18:37:42
просто мб явный шлак перманентом банить, а других на время в RO, образумиться

Владислав
17.08.2017
08:45:53
Ребят, тупенький вопрос, на как правильно работать с таким кейсом? Есть некий дабл, есть некий процент, нужно взять процент от дабла и округлить полученное значение. Например double = 10.0, процент = 65%, берём 65% от 10, ожидаем получить 6.5, но на практике получаем 6.4999999, из-за чего округление неправильно работает, как в общем случае такие ситуации обрабатывать?

Dmitry
17.08.2017
08:49:14
Это не ошибка округления, а принципиальная проблема представления десятичных чисел в бинарной форме. Если ты знаешь, что тебе достаточно одного знака после запятой, то можешь просто печатать с точностью до одного знака — тогда произойдёт округление. Нужно знать больше о контексте твоей задаче, чтобы предложить более оптимальное решение.

Antony
17.08.2017
08:49:51
https://habrahabr.ru/post/112953/

Dmitry
17.08.2017
08:50:29
??

Eugene
17.08.2017
08:52:51
С decimal там ничего не планируется в стандарте?

Страница 1218 из 2477