Pour un moteur de règles développé en C++, l'une des principales caractéristiques est le type de valeur. Ce que j'ai jusqu'ici est un peu comme un VARIANT de style COM - chaque valeur connaît son type. Il y a quelques règles pour la conversion de type mais c'est un peu brouillon. Je me demandais s'il y avait de bonnes classes de valeur de dépôt que je pourrais utiliser pour résoudre ce problème, sans avoir besoin d'utiliser tout un système préconstruit. Par exemple, peut-être que boost a quelque chose?Création d'un 'langage' script simple - type de valeur de type VARIANT
Répondre
Vous cherchez boost::any ou boost::variant?
Il existe essentiellement trois types de variantes de réalisation:
- Un type qui peut être casté librement entre les types (pensez langues non typées) -
boost::lexical_cast
est votre ami ici, ouboost::variant
... - A type qui peut contenir tout type, mais est typesafe - par exemple initialisé avec un
int
, reste unint
et ne permet pas d'être traité implicitement comme toute autre chose - c'est le typeboost::any
- Le mal rien permettent le type - casting à ce que vous voulez sans vérification d'erreur, aucun type information held - think
void*
Sonne plus comme il veut boost :: variante. http://www.boost.org/doc/html/variant.html –
@Roger: Oui, remarqué que juste après l'affichage –
je dois regarder de plus près, mais boost :: variantes sonne comme la réponse, pour me sauver l'écriture tout ce truc à partir de zéro. –
Vous devez limiter les conversions implicites au départ: il est plus facile de les ajouter plus tard que de les supprimer une fois qu'elles sont largement utilisées. –
C'est probablement un bon conseil, ma tentative initiale a quelques incohérences étranges sur les conversions. –