ich eine Template-Funktion haben, nennen wir es das „Client“:Wie umschließt man eine Funktion mit einer variierenden Anzahl von Standardargumenten, um nur ein Argument zu haben?
template<typename T>
void client(T (*func)(const std::string&), const std::string& s) {}
Dann gibt es eine Reihe von „adaptierten“ Funktionen, die alle einen identischen Typ des ersten, nicht-Standardargument, aber die Die folgenden Argumente variieren in der Anzahl und haben Standardwerte:
void adaptee_one(const std::string&, int i = 1, char* c = nullptr) {}
void adaptee_two(const std::string&, float* f = nullptr) {}
Die obigen Funktionen sind gegeben. Nun, was ich tun möchte ist, sie an die obige client<>()
Funktion als der erste Parameter zu übergeben, und ich interessiere mich nur für die Übergabe des ersten Arguments, const std::string&
. So mache ich folgendes:
void bindAdapteeOne(const std::string& s) {
return adaptee_one(s);
}
void bindAdapteeTwo(const std::string& s) {
return adaptee_two(s);
}
Und dann bindAdapteeX()
zu client<>()
passieren.
Was ich tun möchte ist, die Verpackung zu automatisieren oder einen (Templates) Wrapper anstelle von einem pro Adaptee zu haben. Ich denke, dies könnte für Variadics der Fall sein, aber ich habe keine Ahnung, wie man sie genau anwenden kann.
C++ 11 ist in Ordnung, C++ 14 ist in Ordnung, wenn absolut notwendig.
Sind Lambdas zulässig? – AndyG
@AndyG Es ist in einem Namensraum, außerhalb jeder Klasse, also denke ich ja, solange es einen gesunden Ort gibt, um sie zu behalten. – iksemyonov
@rici Weil das [nicht funktioniert] (https://wandbox.org/permlink/WYzQfhLbPA7KXIEy). – Barry