Newsgroup: it.comp.lang.c++
Titolo: emulare i templates a runtime (tipi variabili o dinamici)

se ne sarà già sicuramente parlato nel NG, solo che non so 
formulare i termini di una ricerca nei vecchi messaggi (da 
quanto è chiaro il titolo si intuisce che non sapevo bene che 
parole usare).
Cmq spero che me ne suggeriate qualcuna, se c'è un modo 
riconosciuto per definire il concetto.
Ripetendolo, come pensereste di emulare la parametrizzazione 
statica di un template in modo dinamico (runtime) ?
Chiarisco ancora meglio la domanda : in effetti nn mi interessa 
tanto la dinamicità dei parametri di input (gli argomenti), 
perché con l'overload delle funzioni e le funzioni virtuali ad 
es. forse qualcosa si può già fare.
Il vero nocciolo del problema è fare in modo che funzioni 
restituiscano oggetti di tipo diverso determinato a runtime 
(ovviamente senza rendere né un puntatore VOID nè una ipotetica 
union di tutte le possibili scelte e un bit-field che la 
identifichi ... diciamo un oggetto pulito, definito altrove, ma 
di volta in volta imprevedibile).
Forse ecco, mi è venuto in mente, il termine forse giusto era 
emulare una sorta di introspezione ?
ciao e grazie di qualche consiglio (anche segnalazione di vecchi 
thread, tipo di quando c'era il mitico kiuhnm)
Soviet

 thread, tipo di quando c'era il mitico kiuhnm)
Secondo me sbagli approccio. Invece di porre domande a proposito di
una ipotetica soluzione, che probabilmente non esiste, ad un tuo
problema a noi ignoto, faresti meglio a descrivere il problema vero e
proprio. Ovvero a cosa ti servirebbe questa fantomatica emulazione a
runtime dei template?
In ogni caso provo a darti due suggerimenti:
1) Usa boost::any (
http://boost.org/doc/html/any.html
) o
   qualcosa di analogo.
2) Passa ad un linguaggio con tipizzazione dinamica, ad
   esempio Python.
Ciao,
Nicola

 emulare una sorta di introspezione ?
In inglese credo sia reflection.
Io l'ho usata di recente ed è molto interessante. Ho trovato tutto quello 
che serviva su C++ FAQ Lite. In pratica devi definire una classe base da cui 
derivare gli oggetti che devi ritornare. La funzione restituirà un puntatore 
alla classe base, ma ovviamente questo punterà alla classe derivata 
richiesta.
La vera magia sta nel definire un costruttore virtuale (che non è un 
costruttore con davanti "virtual"), ovvero una funzione che crea gli oggetti 
in base a un parametro. Per fare questo puoi usare una mappa di puntatori 
che viene riempita all'inizio del programma con i puntatori a degli oggetti 
dummy che servono solo per poter usare il costruttore di copia virtuale di 
quegli oggetti.
La super magia è quando usi degli oggetti statici nel file cpp e usi il loro 
costruttore per riempire la mappa. Occhio ai problemi dovuti all'ordine di 
inizializzazione degli oggetti static (static initialization fiasco).
E' un casino, ma se vuoi chiarisco.
-- 
Costantino Grana 

Non so ancora bene a cosa potrebbe servirmi ciò, cmq.
E' comunque una soddisfazione. Pensa che bello progettare qualcosa che
non serve ASSOLUTAMENTE a niente!

 
sicuramente, apprezzo. Se poi trovi i link a materiale e 
snippets, sono benvenuti
ciao
Soviet

 non serve ASSOLUTAMENTE a niente!
ma infatti, è una utile forma di distrazione costruttiva. In sto 
periodo mi sto schiattando (e stufando, pure) a furia di 
scrivere delle dispense di chimica che tanto quasi nessuno 
leggerà e sicuramente NESSUNO studierà, quindi ogni tanto 
proprio mi viene di pensare a cose un po' diverse.
Spero di non urtare quelli che programmano per lavoro e anche 
per necessità, ovviamente, nel dire ciò !
riciao