Я изучаю функциональное программирование в C++. Мое намерение состоит в том, чтобы передать не общую функцию в качестве аргумента. Я знаю о методе шаблона, однако я хотел бы ограничить подпись функции как часть дизайна API. Я разработал 4 различных примера методов на cpp.sh:
// Example program
#include <iostream>
#include <string>
#include <functional>
typedef int(functor_type)(int);
int by_forwarding(functor_type &&x) {
return x(1);
}
int functor_by_value(functor_type x) {
return x(1);
}
int std_func_by_value(std::function<functor_type> x) {
return x(1);
}
int std_func_by_forwarding(std::function<functor_type> &&x) {
return x(1);
}
int main()
{
std::cout << functor_by_value([](int a){return a;}); // works
std::cout << std_func_by_value([](int a){return a;}); // works
std::cout << std_func_by_forwarding(std::move([](int a){return a;})); // works
//std::cout << by_forwarding([](int a){return a;}); // how to move lambda with forwarding ?
}
Выполнена ли какая-либо из вышеуказанных попыток? Если нет, как мне достичь своей цели?