Size: a a a

2021 February 16

К

Касиет in supapro.cxx
Подскажите правильно
источник

К

Касиет in supapro.cxx
Или нет
источник

АВ

Александр Водянников... in supapro.cxx
У тебя вообще не понятно что код делает ))
источник

АВ

Александр Водянников... in supapro.cxx
Н[5,6] - а ты пишешь A[11].
источник

d

d7d1cd in supapro.cxx
Делаю класс. Один из методов этого класса принимает указатель на функцию, которая сама должна принимать параметр. Так как класс делается универсальным (для применения его без изменений в любом проекте), то описанный метод сделал так:

void Method(void (*callback)(void*), void* callbackParm) ;

Функция, которая передается в метод в качестве параметра callback, через static_cast приводит параметр void* к реально передаваемому типу. Но мне сдается, что это ужасно криво.
Как сделать это правильно? Наверное метод класса Method надо сделать шаблонным? Но тогда и сама функция, передаваемая в метод, должна быть шаблонной...
источник

SH

Serhii Herashchenko in supapro.cxx
d7d1cd
Делаю класс. Один из методов этого класса принимает указатель на функцию, которая сама должна принимать параметр. Так как класс делается универсальным (для применения его без изменений в любом проекте), то описанный метод сделал так:

void Method(void (*callback)(void*), void* callbackParm) ;

Функция, которая передается в метод в качестве параметра callback, через static_cast приводит параметр void* к реально передаваемому типу. Но мне сдается, что это ужасно криво.
Как сделать это правильно? Наверное метод класса Method надо сделать шаблонным? Но тогда и сама функция, передаваемая в метод, должна быть шаблонной...
Почему она должна быть шаблоннной?
источник

d

d7d1cd in supapro.cxx
Serhii Herashchenko
Почему она должна быть шаблоннной?
Функция? Вот, кстати, тоже про это подумал... Ведь, да, не должна.
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Danya
User-defined конструктор по умолчанию же убивает агрегатную инициализацию?
Да, с 20 убивает уже user-declared
источник

d

d7d1cd in supapro.cxx
То есть, только метод класса делаем шаблонным? Вот так примерно:

template<typename R, typename P>
R Method(R (*callback)(P*), P* callbackParm) ;
источник

SH

Serhii Herashchenko in supapro.cxx
d7d1cd
То есть, только метод класса делаем шаблонным? Вот так примерно:

template<typename R, typename P>
R Method(R (*callback)(P*), P* callbackParm) ;
template <class Ret, class... Args>
Ret Method(Ret (*callback)(Args&&...)
, Args&&... args);
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
d7d1cd
Делаю класс. Один из методов этого класса принимает указатель на функцию, которая сама должна принимать параметр. Так как класс делается универсальным (для применения его без изменений в любом проекте), то описанный метод сделал так:

void Method(void (*callback)(void*), void* callbackParm) ;

Функция, которая передается в метод в качестве параметра callback, через static_cast приводит параметр void* к реально передаваемому типу. Но мне сдается, что это ужасно криво.
Как сделать это правильно? Наверное метод класса Method надо сделать шаблонным? Но тогда и сама функция, передаваемая в метод, должна быть шаблонной...
template <typename F, typename... Args>
void method(F f, Args... args) requires std::invokable<F, Args...>;

Perfect forwarding по вкусу
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
А, там ibm i. Тогда вместо концептов статик ассерт в тело или свинью в тип возврата
источник

d

d7d1cd in supapro.cxx
Artöm Bakri Al-Sarmini
А, там ibm i. Тогда вместо концептов статик ассерт в тело или свинью в тип возврата
Да, ibm i. Концепты не светят, зачем статик ассерт не понял...
источник

D

Dmitriy in supapro.cxx
d7d1cd
Да, ibm i. Концепты не светят, зачем статик ассерт не понял...
Чтобы в случае неверных аргументов получать нормальное сообщение, а не портянку из ошибок компиляции на два монитора
источник

d

d7d1cd in supapro.cxx
Dmitriy
Чтобы в случае неверных аргументов получать нормальное сообщение, а не портянку из ошибок компиляции на два монитора
Я еще не писал код с шаблонами с переменным числом аргументов. Не понимаю как могут быть неверные аргументы, если метод шаблонный, он по определению должен уметь принимать аргументы любых типов...
источник

D

Dmitriy in supapro.cxx
d7d1cd
Я еще не писал код с шаблонами с переменным числом аргументов. Не понимаю как могут быть неверные аргументы, если метод шаблонный, он по определению должен уметь принимать аргументы любых типов...
Можно ошибиться при вызове
источник

D

Dmitriy in supapro.cxx
Шаблон-"вызывальщик" всё переварит, а функция - нет
источник

X

Xaxa4y in supapro.cxx
всем ку, наверно не по теме. Кто-нибуть может поделится чатами по ИБ вирусологии?
источник

d

d7d1cd in supapro.cxx
Dmitriy
Шаблон-"вызывальщик" всё переварит, а функция - нет
Блин... Надо пример. Попробую сейчас накидать, потом покажу, а вы подскажите, где надо вставить статик ассерт.
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
d7d1cd
Я еще не писал код с шаблонами с переменным числом аргументов. Не понимаю как могут быть неверные аргументы, если метод шаблонный, он по определению должен уметь принимать аргументы любых типов...
Он потенциально может. Это не значит, что инстанция возможна для любого множества типов
источник