Как вызвать в шаблоне функцию с разным количеством аргументов?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как вызвать в шаблоне функцию с разным количеством аргументов?

Сообщение Anonymous »

Я хочу, чтобы мой шаблон принимал лямбды с разным количеством параметров и мог их обрабатывать.
В приведенном ниже коде шаблонный процесс принимает вызываемый объект (функцию), но не знает, принимает ли переданная лямбда аргументы или нет. Могу ли я как-то проверить это в шаблоне и сделать соответствующий вызов?

Код: Выделить всё

void process(auto fn) {
[[maybe_unused]] float res = fn(2.0f);

// Is there a chance to make something like:
// float res = takes-no-args() ? fn() : fn(2.0f);

// do something with res...
}

int main() {
// This is the default usage
process([](float arg) { return arg; });

// I want to be able to make such a call
process([]() { return 1.0f; });

// Possible, but verbose workaround
process([](float) { return 1.0f; });
}
Демо
Простой обходной путь — всегда передавать лямбда-выражение с одной и той же сигнатурой и игнорировать предоставленный аргумент, но это слишком многословно в случай многих аргументов.
Цель — сделать клиентский код максимально простым и понятным.

Подробнее здесь: https://stackoverflow.com/questions/792 ... -arguments
Ответить

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

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

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

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

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