Ich möchte Template-Klasse erstellen, die Funktionszeiger und Argumente für eine dieser Funktion speichern könnte, damit die Funktion später mit diesen Argumenten aufgerufen werden kann.Wie speichere ich eine variable Anzahl von Argumenten mithilfe variadischer Vorlagenargumente?
Ich möchte dies universell schreiben und nicht auf Argumenttypen oder -nummer abhängen. Hier
ist ein scatch der Idee mit der Verwendung von variadische Vorlagen von 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;
}
}
Ich mag würde zumindest haben, die öffentliche Schnittstelle dieser Klasse Typen sicher, wenn es möglich ist. Obwohl es zumindest irgendwie wichtiger ist, diese Arbeit zu bekommen.
Ich habe es geschafft, die Variable Anzahl der Argumente irgendwie zu speichern. Aber ich konnte sie nicht an die Funktion f übergeben. Ich werde es in Antworten schreiben, aber ich möchte, dass Sie über Ihre eigenen Lösungen nachdenken, bevor Sie meinen hässlichen, nicht funktionierenden Versuch sehen.
Ich tring, um den obigen Code mit Microsoft Visual C++ - Compiler November 2012 CTP (v120_CTP_Nov2012) zu kompilieren, aber es wäre am besten, wenn eine Compiler-unabhängige Lösung existieren würde.
Danke
Ich denke, das ist ein Duplikat: http://stackoverflow.com/questions/14833129/a-clean-way-to-store-a-function-and-its-arbitrary-type-arbitrary-number-argum – hmjd
Speichern Sie sie in einem 'std :: tuple' ... –
kennytm
@KennyTM Das sollte eine Antwort sein. – Angew