この関数の関数ポインタと引数を格納できるテンプレート クラスを作成して、関数を後でこの引数で呼び出すことができるようにしたいと考えています。
引数の型や数に依存せず、普遍的に書きたいと思います。
これは、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) でコンパイルしようとしていますが、コンパイラに依存しないソリューションが存在することが最善です。
ありがとうございました