problème de base: Je veux être en mesure de prendre une instance d'une classe basé sur un modèle, disent:Affectation des identifiants numériques uniques aux instances d'une classe Templated
template<class a, class b, class c> class foo;
foo<int, float, double>;
et faire quelque chose comme:
foo<int, float, double>::value; //Evaluates to a unique number
foo<long, float, double>::value; //Evaluates to a different unique number
foo<int, float, double>::value; //Evaulates to the same unique number
Sauf, vraiment, il est:
template<class a, class b, class c>
int getUniqueIdentifier()
{
return foo<a, b, c>::value;
}
Solution actuelle tentative:Je pense que je veux utiliser "Extensible Associative Sequence" de Boost :: MPL, puisque chaque élément obtient son propre identifiant unique, mais je pense que je dois pouvoir modifier la séquence en place, qui "insert" doesn ' t faire.
Il est possible que j'aboie le mauvais arbre. (Du côté positif, dayum, mais MPL!)
Objet:
Réinventer la roue sur un système de signaux & Sockets. Les composants créent et enregistrent des canaux avec un "standard", qui utiliserait les identifiants uniques pour placer les canaux dans une carte, permettant une polyvalence d'exécution. J'ai essayé de regarder la bibliothèque Qt comme un exemple, mais je ne peux pas analyser leurs abréviations, et je pense que je manque un savoir-faire formel.
Merci!
Le problème fondamental ici est que les modèles peuvent être instanciés dans différentes unités de traduction. Il est donc impossible d'attribuer des numéros uniques au moment de la compilation - deux TU pourraient être compilées en même temps sur des ordinateurs différents! – MSalters
Oh, et le problème principal ne semble pas être le problème principal - il y a un but sous-jacent qui est en réalité mieux résolu par d'autres moyens. – MSalters