Après avoir lu C++ compile-time string hashing with Boost.MPL, et compte tenu d'un problème que j'ai, ce qui suit est venu à l'esprit.Obtenir le type de modèle sous la forme d'une chaîne
je la classe de base:
template<class Command>
class Base {
typedef Command CommandType;
}
Il est censé être une classe de base utilitaire pour les classes Commandes, donc ils ne ont pas besoin de typedef et de déclarer certains membres eux-mêmes, ils seraient tout simplement hérite de Base avec les types auxquels ils se réfèrent. Ils peuvent donc être utilisés comme ceci:
class CommandInstantiatorA : public Base<CommandA>
{
public:
static std::string GetID() { return "CommandInstantiatorA "; }
}
Cependant, il y a cette autre méthode (GetID) que je ne pouvais pas « créer des modèles à » qui retourne un identifiant unique throught l'application. Je voudrais pouvoir hacher le type passé à la classe Base, donc les autres classes n'auraient qu'à spécifier le type. Quelque chose comme ceci:
template <class Base>
class Base {
typedef boost::hash_value(TO_STRING(Base)) ID; //should also be read as: typedef boost::hash_value("CommandA") ID;
...
}
Y at-il une telle macro (to_string) qui donne le résultat « Commanda » dans le dernier exemple. Y at-il quelque chose dans Boost.MPL qui peut le faire?
Je tiens à souligner que RTTI est disponible uniquement sur la classe avec au moins 1 fonction virtuelle. Pas difficile à concevoir, mais frustrant quand ça ne marche pas et qu'on ne sait pas pourquoi. voir: http://en.wikibooks.org/wiki/C%2B%2B_Programming/RTTI et http://www.cplusplus.com/reference/std/typeinfo/type_info/ – KitsuneYMG
Un autre point, typeid peut être appliqué directement à un type. Ce ne doit pas être une instance. par exemple. typeid (Base) .name() pourrait remplacer TO_STRING dans votre exemple – KitsuneYMG