Ich schreibe eine Bibliothek, die eine gute Menge von beiden Vorlagen Tricks und boost :: any enthält. Ich habe in einer Situation führen, wo ich dies im Wesentlichen haben:boost :: any und templates
boost::any a1, a2, a3, a4;
... und ich brauche eine Funktion aufzurufen, die wie folgt aussieht:
template <typename A1, typename A2, typename A3, typename A4>
void somefunc (A1 a1, A2 a2, A3 a3, A4 a4);
ich auf eine obszöne verschachtelte Serie zurückgreifen konnte von if-Anweisungen, aber unter der Annahme, dass ich 10 unterschiedliche Typen handle, sind das 10.000 if-Anweisungen! Boost Präprozessor könnte hier helfen, aber das ist immer noch eine schreckliche Lösung.
Gibt es eine bessere Möglichkeit, eine Template-Funktion mit dem Inhalt eines boost :: any aufzurufen, ohne auf diese Art von Wahnsinn zurückzugreifen? Soweit ich das beurteilen kann, gibt es das nicht.
Nur die Benutzer der 'boost :: any' Die Instanz kann den exakten Wert zur Laufzeit erhalten (indem sie einen hardcoded Typ liefert), Sie können diese Funktion nicht mit dem Wert aufrufen, der in 'boost :: any' enthalten ist, weil ihr Typ * zur Kompilierungszeit * gelöscht wurde. Was ist das größere Problem, das Sie versuchen zu lösen? 'boost :: any' ist ziemlich low-level. – GManNickG
Haben Sie alle 'any'-Objekte als ein Objekt, und wenn Sie alle auf einmal setzen, sichern Sie auch einen Zeiger auf die richtige' somefunc' Instanziierung (z. B. '& somefunc'). –
Xeo
@GManNickG Das größere Problem, das ich versuche zu lösen, beinhaltet die automatische Generierung von Lua-Bindungen auf der einen Seite und eine boost :: any, die das Ergebnis einer beliebigen asynchronen Funktion enthält. In dieser Situation kann keiner durch den anderen ersetzt werden. – Xtapolapocetl