Angenommen, ich habe eine Klasse, die ein funktionales Objekt enthält, und im Konstruktoraufruf übergeben ich Argumente, die irgendwann an das funktionale Objekt übergeben werden sollen später. Etwas wie:Variadische Vorlagen - wie kann ich einen Typ erstellen, der übergebene Argumente speichert
class Binder{
public:
Binder(functional_object, listOfParameters);
callFunctionalObject(); // calls functional object with given list of parameters
};
Bevor C 11 ++ ich nicht Variadische Vorlagen verwenden könnte, so würde man tun:
struct none{};
template <typename T1, typename T2=none, typename T3=none>
class Binder{
public:
Binder(T1 functionalObject, T2 arg1=none(), T3arg3=none());
void callFunctionalObject();
private:
T1 m_functionalObject;
T2 m_arg1;
T3 m_arg2;
};
Wo callFunctionalobject
umgesetzt werden könnten wie folgt:
template<typename T1, typename T2, typename T3>
void Binder<T1,T2,T3>::callFunctionalObject(){
callImpl(m_functionalObject, m_arg1, m_arg2);
}
und callImpl
würde überladen werden, um Objekte des Typs none
zu erkennen, um die richtige Anzahl von Argumenten an das funktionale Objekt zu übergeben.
Nun zu C++ 11 wechseln Ich weiß nicht, wie ich die Tatsache implementieren soll, dass ich im privaten Bereich Mitglieder habe, auf die ich direkten Zugriff habe.
Kann mir jemand erklären, wie ich dasselbe mit C++ 11 oder C++ 14 machen kann?
Ich dachte an so etwas, aber ich würde nicht functionalObject dann einen touple in den Parametern anstelle der normalen Liste der Parameter erhalten? – DawidPi
Das Auspacken von Tupel-Parametern erfordert ein wenig Arbeit, um eine Live-Code-Lösung für Sie zu bekommen :) – coincoin
@DawidPi Eine C++ 14-Lösung mit 'std :: index_sequence' aktualisiert – coincoin