我想创建一个模板类,它可以存储这个函数的函数指针和参数,以便以后可以用这个参数调用该函数。
我想通用地写这个,而不是依赖于参数类型或数量。
这是使用c ++ 11的可变参数模板的想法:
template<class T, typename... Params>
class LazyEvaluation {
private:
// Function to be invoked later
T (*f)(Params...);
// Params for function f
Params... storedParams; // This line is not compilable!
bool evaluated;
T result;
public:
// Constructor remembers function pointer and parameters
LazyEvaluation(T (*f)(Params...),Params... params)
: f(f),
storedParams(params) //this line also cannot be compiled
{}
// Method which can be called later to evaluate stored function with stored arguments
operator T&() {
// if not evaluated then evaluate
if (! evaluated) {
result = f(storedParams...);
evaluated = true;
}
return result;
}
}
如果可能的话,我希望至少有这个类类型的公共接口是安全的。尽管至少以某种方式完成这项工作更为重要。
我设法以某种方式保存了可变数量的参数。但我无法将它们传递给函数 f。我会把它写成答案,但我希望你在看到我丑陋的不工作尝试之前考虑自己的解决方案。
我正在尝试使用 Microsoft Visual C++ Compiler Nov 2012 CTP (v120_CTP_Nov2012) 编译上面的代码,但最好是存在独立于编译器的解决方案。
谢谢