Создание простого скриптового «языка» - VARIANT-подобного типа значения - PullRequest
1 голос
/ 10 января 2010

Для механизма правил, разработанного в C ++, одной из основных функций является тип значения. То, что у меня есть, немного похоже на VARIANT в стиле COM - каждое значение знает свой тип. Есть некоторые правила для преобразования типов, но это немного грязно.

Я задавался вопросом, есть ли хорошие классы значений, которые я мог бы использовать, чтобы решить эту проблему, не требуя от меня использования целой предварительно созданной системы. Например, может у boost есть что-то?

1 Ответ

6 голосов
/ 10 января 2010

В поисках наддува :: любой или наддува :: вариант ?

Существует три основных варианта реализации:

  1. Тип, который можно свободно приводить между типами (например, нетипизированные языки) - boost::lexical_cast ваш друг здесь, или boost::variant ...
  2. Тип, который может содержать любой тип, но безопасен для типов, например, инициализируется int, остается int и не позволяет неявно рассматриваться как что-либо еще - это тип boost::any
  3. зло разрешить что угодно тип - приведите к тому, что вы хотите, без проверки ошибок, информация о типе не хранится - подумайте void*
...