Originariamente inviato da MItaly
Nessun compilatore è così stupido; il compilatore decide se fare inlining o meno in base alle dimensioni del codice che ne verrebbe fuori, e in base ai vantaggi dal punto di vista delle prestazioni che l'inlining potrebbe dare. Per un metodo così massivo (e "costoso", visto che sono tutte chiamate a funzioni "complicate" che probabilmente fanno addirittura trapping in kernel mode) dubito che il compilatore faccia inlining di alcunché - l'overhead di chiamata a funzione è ridicolo rispetto a quello che fa la funzione, per cui ci sono solo svantaggi nell'inlining (aumentano le dimensioni del codice e si sbidona l'i-cache).
Se memorizzi puntatori e non oggetti le funzioni virtuali funzionano correttamente. Se invece il tipo memorizzato dal tuo container è la classe base di tutte queste varie classi (e non un puntatore ad essa) si incorre in object slicing, per cui tutti gli oggetti memorizzati "diventano" del tipo della classe base.
Ergo, se si vogliono memorizzare oggetti polimorfici in un container STL, nel 90% dei casi si devono memorizzare i
puntatori ad essi.
Non ho capito...

in ogni caso, nei compilatori moderni "inline" non ha praticamente influenza sull'inlining (la documentazione di VC++ dice addirittura esplicitamente che inline è completamente ignorato ai fini della decisione, visto che l'euristica usata dai compilatori per queste cose funziona molto meglio dell'intuizione dei programmatori), serve solo a consentire "deleghe" alla ODR.
Non ho capito/bis... non è che la funzione viene eseguita a compile-time, semplicemente il codice dei template viene espanso per il tipo specifico a compile-time, poi l'esecuzione avviene a runtime quando decidi tu di richiamare il metodo in questione, ovvero quando si spera che m_vboID sia stato correttamente inizializzato.
L'espansione sì, l'esecuzione ovviamente a runtime...
Eh?
Onestamente, mi sembra che tu abbia capito cose molto strane... un template è semplicemente un generatore di codice, è un po' come se fosse una macro all'ennesima potenza. Quando tu istanzi un template è un po' come se il compilatore facesse copia-incolla del codice del template sostituendo i parametri template che hai specificato; poi per il resto l'esecuzione del codice avviene normalmente.