Ja, das können Sie.
Es ist jedoch ziemlich kompliziert (fortgeschrittene Meta-Programmierung von Vorlagen) Das ganze Konzept basiert auf der Eigenschaft "Substitutionsfehler ist kein Fehler (SFINAE)" in C++-Vorlagen.
Im Wesentlichen können Sie die Vorlage wie folgt verwenden 'template <typename T, void (T::*)()>'
und instanziieren mit <T, T::Init>
in Ihrem Vektor. Wenn die Ersetzung nicht vorhanden ist, erhalten Sie einen Ersetzungsfehler (das SFINAE-Prinzip wird hier angewandt, da Sie in den meisten Fällen stattdessen den Konstruktor verwenden möchten).
Dies ist natürlich eine stark vereinfachte Beschreibung. Es tut mir leid, dass ich derzeit keine bessere Beschreibung liefern kann, aber vielleicht möchten Sie einen Blick darauf werfen diese Diskussion . Suche nach has_member und is_call_possible.
Ich hoffe, es hilft.
Oren