класса. Хочу проверить с помощью static_assert (используя std::is_same или любой другой способ) , что эта функция член имеет один аргумент и это std::atomic_bool. Как это сделать? Приложу микрофрагмент кода, что бы яснее было
template<class T>
void executor(T foo)
{
static_assert(...., "foo must be a member function with std::atomic<bool> argument");
}
a.executor(&A::param);
концепты вам доступны?
к сожалению, нет, ограничен с++14
Надо написать простой тайп-трейт И лучше сделать сфинае, а не статик ассерт
Можно спереть способ, как у Эрика Ниблера были сделаны концепты на c++14
выразите это требование напрямую: template<typename T, typename U> void foo(T (U::*member)(std::atomic<bool>)) { } struct boo { void f(std::atomic<bool>) {}; }; int main() { boo b; foo(&boo::f); }
идеально, большое спасибо! Только не могу понять, для чего нужен шаблонный параметр T ? не встречал таких конструкций в аргументах функции раньше
это тип возвращаемый вашей функцией-членом, он так же будет выведен вместе с типом самого класса U
если у вашей функции-члена фиксированный тип возврата, то можете убрать T и вместо него указать конкретный тип результата void или что там у вас
А зачем, вот вопрос!
Обсуждают сегодня