2010-01-10 5 views
1

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

+3

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. –

+0

C'est probablement un bon conseil, ma tentative initiale a quelques incohérences étranges sur les conversions. –

Répondre

6

Vous cherchez boost::any ou boost::variant?

Il existe essentiellement trois types de variantes de réalisation:

  1. Un type qui peut être casté librement entre les types (pensez langues non typées) - boost::lexical_cast est votre ami ici, ou boost::variant ...
  2. A type qui peut contenir tout type, mais est typesafe - par exemple initialisé avec un int, reste un int et ne permet pas d'être traité implicitement comme toute autre chose - c'est le type boost::any
  3. Le mal rien permettent le type - casting à ce que vous voulez sans vérification d'erreur, aucun type information held - think void*
+2

Sonne plus comme il veut boost :: variante. http://www.boost.org/doc/html/variant.html –

+0

@Roger: Oui, remarqué que juste après l'affichage –

+0

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. –