C ++ контейнер любого / варианта, каждый элемент имеет неизменный тип - PullRequest
1 голос
/ 05 декабря 2011

Я использую std::map<const char*, boost::any> для хранения настроек моей библиотеки.Каждый параметр использует только один базовый тип значения, и я хочу применить это во время вызовов конфигурации на set() или аналогичный.Настройки инициализируются значениями по умолчанию правильного типа.

Вот некоторый псевдокод, который, мы надеемся, показывает, чего я пытаюсь достичь:

using namespace std;
using namespace boost;

void set(map<const char *, any> &settings, const char *key, any &value)
{
    if (type_of(value) != type_of(settings[key]) throw wrong_type_exception();
    settings[key] = value;
}

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

Я использовал boost::any, но мог бы рассмотреть опцию boost :: variable * which(), если это единственное жизнеспособное решение.

1 Ответ

2 голосов
/ 05 декабря 2011

value.type() != settings[key].type()

Если settings[key] ранее не существовало, тогда settings[key].type() равно typeid(void), что равно value.type(), если и только если value пусто.Таким образом, вы не сможете добавлять новые пары настройки / значения с помощью этой функции, но на основе псевдокода, который, кажется, предназначен.

...