2016-05-07 6 views

Antwort

1

Eine Funktion oder Methode kann kein Parameterpaket zurückgeben.

Eine Funktion kann eine std::tuple zurückkehren, aber:

template<class... keys> 
struct something { 
    virtual std::tuple<keys...> getContents(foo* Foo) const = 0; 
} 

Sie auch diese Vorlage für eine einzige Art spezialisieren könnte, und gibt den Typ anstelle eines Tupel ein Element; und spezialisieren Sie es für ein leeres Parameterpaket und geben Sie eine void zurück.

EDIT:

Sie haben Ihre Frage geklärt. Sie haben versucht, etwas anderes zu tun, und Ihre ursprüngliche Erklärung war verständlicherweise etwas daneben.

Sie können erreichen, was Sie suchen, aber es ist ein wenig komplizierter und erfordert rekursive Vorlagen und Spezialisierung, aber sieht so aus, als ob Sie das wollen.

+0

Was ich wirklich tun möchte, ist abgeleitete Klassen erforderlich, um Gettoren für jeden "Schlüssel" zu implementieren, den sie der Basisklasse anzeigen. Wenn ich sie manuell spezialisiere, würde das bedeuten, die Basisklasse jedes Mal neu zu schreiben, wenn eine abgeleitete Klasse geändert wird. Gibt es eine Möglichkeit, eine Methode für jeden Typ in der Packung zu erhalten? – SaburoutaMishima

+0

Ok, ich habe meine Antwort aktualisiert, als Antwort auf Ihre Klarstellung. –

+0

Wow. Hast du diese Antwort jemals aktualisiert? Das scheint genau das zu sein, wonach ich suche. Ist diese Interpretation korrekt - jedes Mal, wenn "getcontents_base" spezialisiert ist, definiert der Compiler eine Spezialisierung von getBar, dann beginnt er mit einem less-Typ im Parameterpack. Also, wenn es fertig ist, hat jede getcontents_base <> im Vererbungsdiagramm eine Version von getBar, die für alle Typen gilt, die 'getcontents' zuerst an sie übergeben wurden? – SaburoutaMishima