Voir le titre. J'ai un modèle. Je veux forcer l'instanciation d'une instance particulière d'un modèle. Comment dois-je m'y prendre ?
Plus précisément, peut-on forcer une classe modèle abstraite à s'instancier ?
Je pourrais élaborer car je me pose la même question. Dans mon cas, je construis une bibliothèque. Certaines implémentations de modèles sont volumineuses et comprennent beaucoup de choses, mais ne sont générées que pour quelques types. Je veux les compiler dans la bibliothèque et exporter toutes les méthodes, mais ne pas inclure l'en-tête avec le code partout.
ie :
template<class T>
OS_EXPORT_DECL class MyTmpl
{
T *item1;
public:
inline T *simpleGetT() { return(item1); } /* small inline code in here */ }
T *doSomeReallyBigMergeStuff(T *b); // note only declaration here
};
// *** implementation source file only seen inside library
template<class T>
MyTmpl<T>::doSomeReallyBigMergeStuff(T *b)
{
... a really big method, but don't want to duplicate it,
so it is a template ...
}
Je pourrais bien sûr référencer toutes les méthodes dans la bibliothèque, ce qui les forcerait à compiler et à exporter, mais le but n'est pas d'ajouter du code inutile à la bibliothèque, comme le formatage des arguments pour les éléments et le code pour les appeler, etc.
? ???? Plus précisément, je construis la bibliothèque pour plusieurs versions de MSC et des compilateurs GCC et intel.