Проблемы с выводом типа шаблона с помощью аргумента C++ std::function [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблемы с выводом типа шаблона с помощью аргумента C++ std::function [дубликат]

Сообщение Anonymous »


В C++20 я пытаюсь передать объект функции, указатель или лямбда-выражение, в шаблонную функцию, которая принимает std::function. Мне нужно знать, каковы типы аргументов и возвращаемых значений объектов функции, чтобы они были частью сигнатуры шаблона. Я могу заставить его работать для функции, принимающей указатель на функцию, но не для функции, принимающей std::function. Я не могу понять, что я делаю неправильно и возможно ли то, что я делаю. Код, который дает сбой:...

#include шаблон auto setFuncPtr(RET fn(const ARG1&)) -> void { } шаблон auto setStdFunc(const std::function &fn) -> void { } auto func(const int &i) -> int { вернуть я; } int main(int argc, char *argv[]) { setFuncPtr(функ); //< все хорошо setStdFunc (функ); //< компиляция не удалась setStdFunc(func); //< буду рад, если форсирую типы setStdFunc([](const int &i) -> int { return i;}); //< компиляция не удалась } Соберите 17 борков со следующим...

:21:5: ошибка: нет соответствующей функции для вызова setStdFunc 21 | setStdFunc (функ); //< компиляция не удалась | ^~~~~~~~~~ :9:6: примечание: шаблон-кандидат игнорируется: не удалось сопоставить «std::function» с «auto (const int &) -> int» 9 | auto setStdFunc(const std::function &fn) -> void | ^ :23:5: ошибка: нет соответствующей функции для вызова setStdFunc 23 | setStdFunc([](const int &i) -> int { return i;}); //< компиляция не удалась | ^~~~~~~~~~ :9:6: примечание: шаблон-кандидат игнорируется: не удалось сопоставить «std::function» с «(лямбда в :23:16)» 9 | auto setStdFunc(const std::function &fn) -> void | ^ Возникло 2 ошибки. Компилятор вернул: 1 Ссылка на бога
Ответить

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

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

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

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

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