Я хотел бы передать тип функции (например, int(float)
) в шаблон класса, который отделяет тип возвращаемого значения от списка аргументов переменной:
template<typename R, typename... Args>
class CallFunction
{
public:
R operator()(Args&&... args)
{
std::cout << ("" << ... << (args << "\n"));
return R{100};
}
};
int main()
{
CallFunction<int(float)> cf;
std::cout << "return value: " << cf(200.f) << "\n";
}
Я понимаю, что приведенный выше код неработай. В этом случае R
равняется int(float)
вместо просто int
, как я ожидаю. Вот живой пример .
Я уже видел подобные хитрости шаблонов, и они действительно как-то работали. Я видел много ответов на SO относительно того, как это сделать, но для этого требуется действительный указатель на функцию. Здесь я указываю тип функции напрямую, поэтому decltype
решение здесь не применимо.
Как мне это сделать? Я могу использовать до C ++ 17 для своего решения.