编辑 - 找到答案here。
在C ++中,我试图创建一个仿函数,我可以将特定变量用作构造它时函数的参数。它使用可变参数模板传递参数类型并返回函数指针的类型。然后它使用可变参数构造函数来获取它应该使用的参数值。在代码中:
template <typename Return, typename... Args>
class Functor {
public:
Functor(Return(*func)(Args...), Args... args) :
function(func), arguments(args) {}
// This overload to make the class "quack like a function"
Return operator()() { return (*function)(arguments); }
private:
Return(*function)(Args...);
Args... arguments; // <-- Right here is the problem. I don't
// believe this is possible.
}
以及如何使用它:
#include <iostream>
float add(int x, int y) { return x + y; }
int main() {
// Template arguments: returns float, takes two ints
Functor<float, int, int> func(&add, 2, 3);
std::cout << func() << std::endl; // <-- Should print 5, make sense?
}
在实例化仿函数之前, function
具有未知数量的参数,但我认为它们保证匹配函数签名,因为我使用相同的可变参数模板来创建它们(意味着它不会和如果函数签名与模板参数不匹配,则编译。那么,如何存储arguments
以便我可以在以后将它们传递给function
?