Sto scrivendo una libreria che comporta una buona quantità di enigmi del template e boost :: any. Ho eseguito in una situazione in cui ho essenzialmente ho questo:boost :: any e templates
boost::any a1, a2, a3, a4;
... e ho bisogno di chiamare una funzione che assomiglia a questo:
template <typename A1, typename A2, typename A3, typename A4>
void somefunc (A1 a1, A2 a2, A3 a3, A4 a4);
potrei ricorrere ad una serie nidificato oscenamente di istruzioni if, ma supponendo che sto gestendo 10 tipi distinti, sono 10.000 se le affermazioni! Potenziare il preprocessore potrebbe aiutare qui, ma questa è ancora una soluzione orribile.
C'è un modo migliore per chiamare una funzione basata su modelli con il contenuto di una spinta: nessuna senza ricorrere a questo tipo di follia? Per quanto posso dire, non c'è.
Solo l'utente del 'boost :: any' istanza può ottenere il valore esatto in fase di esecuzione (fornendo un tipo con hardcoded), non è possibile chiamare tale funzione con il valore contenuto in 'boost :: any' perché il tipo è stato * cancellato * in fase di compilazione. Qual è il problema più grande che stai cercando di risolvere? 'boost :: any' è roba piuttosto di basso livello. – GManNickG
Tutti gli oggetti 'any' come un oggetto, e quando li si impostano tutti insieme, anche un puntatore sicuro alla corretta istanza' somefunc' (ad esempio '& somefunc'). –
Xeo
@GManNickG il problema più grande che sto cercando di risolvere riguarda l'auto-generazione dei binding Lua su un lato, e un boost :: any che tiene il risultato di una funzione asincrona arbitraria. Nessuno dei due può essere sostituito con l'altro in questa situazione. – Xtapolapocetl