Можно ли определить вызываемую концепцию, включающую функции и лямбды?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Можно ли определить вызываемую концепцию, включающую функции и лямбды?

Сообщение Гость »


Я хочу определить концепцию, которая будет принимать все вызываемые объекты. Вот что я сделал на данный момент:

шаблон концепция Func = std::is_function_v || (требуется (F f) { std::is_function_v; }); bool is_callable(Func auto&&) { вернуть истину; } bool is_callable(авто&&) { вернуть ложь; } Тем не менее, если я определяю их:

auto f = [](auto a, auto b, auto c, auto d, auto e) { вернуть a * b * c * d * e; }; int g(int a, int b) { вернуть а + б; } is_callable(g) имеет значение true, но is_callable(f) имеет значение false, это не сработало ( Я хочу, чтобы оба возвращали true).

Поэтому я попытался посмотреть, скомпилируется ли следующее:

decltype(f.operator()) // Необходимо вызвать ссылку на нестатическую функцию-член decltype(&f.operator()) // Невозможно создать непостоянный указатель на функцию-член decltype(f::operator()) // 'f' не является классом, пространством имен или перечислением decltype(&f::operator()) // то же, что и раньше Это дало мне ошибки, которые вы можете увидеть в комментариях к этим 4 строкам.

Есть ли способ проверить, имеет ли f действительный функтор, который будет означать, что f является лямбда-выражением?

Есть ли лучшее решение для того, чего я пытаюсь достичь?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»