Я хотел бы передать функции в метод универсального класса, чтобы универсальный класс мог вызывать функции, не требующие аргументов, одного аргумента, двух аргументов и т. Д.
Я видел различные шаблоны, но мне не нравится синтаксис. Предыдущий вопрос SO рекомендовал передавать лямбда-выражения, упаковывая функцию:
https://stackoverflow.com/a/48976528/997112
где ответ:
void run_callback(std::function<void()>& func)
{
func();
}
run_callback([]{ func_without_params(); });
и поэтому я добавил метод, который не требует аргументов:
void func_without_params()
{
std::cout << "x" << std::endl;
}
но когда я звоню:
run_callback([]{ func_without_params(); });
в VS2013 intellisense обнаруживает ошибку, и я получаю ошибку компилятора:
error C2664: 'void run_callback(std::function<void (void)> &)' :
cannot convert argument 1 from
'main::<lambda_de925f4d5cd926a8bb664f9c057a7a19>' to
'std::function<void (void)> &'
Что такое main::<lambda_de925f4d5cd926a8bb664f9c057a7a19>
тип? Я не до конца понимаю ошибку.