Instanciation de modèle explicite récursif pour exporter des symboles pour une bibliothèque

StackOverflow https://stackoverflow.com/questions/7398964

Question

Dans ma question précédente, j'ai posé est une instanciation de modèle explicite récursif possible. J'ai vu que c'est en effet possible; Cependant, cette instanciation se révèle être efficace localement uniquement, les symboles du modèle instancié récursivement ne sont pas exportés vers le fichier d'objet et n'apparaissent donc pas dans la bibliothèque (partagée). Je pose donc une question ici plus précisément comme dans mon post précédent:

Étant donné un modèle comme

template<int dim> class Point { ... };

Ce modèle peut être instancié explicitement comme

template class Point<0>;
template class Point<1>;
template class Point<2>;
template class Point<3>;

qui exporte les symboles de Point<0>, ..., Point<3> dans le fichier objet de l'unité de traduction actuelle. Au lieu d'instanier chaque modèle individuellement comme ci-dessus, je voudrais les instancier récursivement avec un seul appel.

Toutes les solutions qui y parviennent sont bien, que ce soit dans le style de la méta-programmation, via une classe d'assistance comme

template class RecursiveInstantiate<Point, 3>;

ou via le préprocesseur. Ici, j'ai examiné la bibliothèque de préprocesseur Boost, qui semble avoir des constructions de boucle. Cependant, je n'ai jamais utilisé la bibliothèque de préprocesseur Boost (tout conseil est apprécié) mais à un premier coup d'œil, je suis sceptique si les boucles peuvent être utilisées avec une instanciation de modèle explicite.

Tout conseil, également une explication pourquoi il est impossible de réaliser ce que je veux réaliser.


En fait, je suis intéressé à généraliser cela pour les classes avec plusieurs paramètres de modèle commeNode<int i1,int i2,int i3> Pour toutes les combinaisons de i1, i2, i3 dans {0,1,2,3}. Mais j'espère pouvoir trouver cette deuxième partie par moi-même. Comme d'habitude, je souhaite utiliser les instanciations explicites pour accélérer les temps de compilation en définissant uniquement les modèles dans une seule unité de traduction, j'ai donc besoin que les méthodes pour être exportées dans le fichier d'objet.

J'espère une solution indépendante du compilateur, mais si cela n'est pas possible, j'en ai besoin pour Linux avec G ++ / Clang.


Voir ci-dessous pour une enquête sur les solutions que j'ai obtenues et les solutions finales que j'en ai faites.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top