170 похожих чатов

Всем привет! У меня тут извращенский вопрос по шаблонам. Допустим какой-то шаблон

параметризован нетиповым аргументом - указателем на функцию-член. Для этого в шаблоне нужно явно указывать, какую сигнатуру имеет метод:
<Ret (Class::*fn_ptr)(Arg1, Arg2, …)>. Можно ли как-то принимать указатель на метод произвольного класса или произвольной сигнатуры (чтобы уже потом вытаскивать из него конкретный класснейм и типы аргументов и возврата)?

12 ответов

24 просмотра

Сделать тип функции параметром шаблона.

а может как-то проще можно? что за задача?

template < MemFnPtr auto >?

Anton-Semenov Автор вопроса
Sergey Anisimov
template < MemFnPtr auto >?

а так можно? Если да, то это вроде фича 23 или 20го стандарта, но лично я с ней ни разу не встречался. не напомнишь, где посмотреть подробности, плиз?

Anton Semenov
а так можно? Если да, то это вроде фича 23 или 20г...

Двадцатого, да, поскольку требуются концепты (можно и констреинтом, разумеется). Статью что-то затрудняюсь привести, впрочем. Сейчас поищу. Edit: В качестве базового примера пока что. #include <type_traits> namespace Impl { template < typename > struct IsMemFnPtr: std::false_type { }; template < typename Ret, typename Class, typename... Params > struct IsMemFnPtr<Ret(Class::*)(Params...)>: std::true_type { }; } template < typename T > concept MemFnPtr = Impl::IsMemFnPtr<T>::value; /* ... */ template < MemFnPtr auto > struct S;

Anton-Semenov Автор вопроса
Sergey Anisimov
Двадцатого, да, поскольку требуются концепты (можн...

За пример спасибо огромное! Но на самом деле мне надо как-то выжить в условиях C++17… =)

Anton Semenov
За пример спасибо огромное! Но на самом деле мне ...

static_assert(), возможно (вместо концепта)? Edit: С учетом примера выше. template < auto p > constexpr bool isMemFnPtr{Impl::IsMemFnPtr<decltype(p)>::value}; template < auto p > struct S { static_assert(isMemFnPtr<p>); };

Anton-Semenov Автор вопроса
Sergey Anisimov
static_assert(), возможно (вместо концепта)? Edit:...

ненене, тут же вопрос не в ограничении типа, а в том, как вообще принимать указатель на произвольную функцию-член (да пусть хоть на void*, если б так было можно) заассертить и за enable_if’ать всегда успеем

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта