nullptr в качестве значения флага для boost :: any map

Если я настроил общую карту контейнера с помощью boost::anyи использовать новый nullptr из C ++ 11 в качестве значения инициализации сродни isset() Тип операции, есть ли потенциальные подводные камни?

Например:

std::map<std::string, boost::any> map;
map["A"] = nullptr;
map["B"] = nullptr;
map["C"] = nullptr;
map["D"] = nullptr;

map["A"] = 1;
map["C"] = 3;

// assume error checking, other types, etc.
for(auto k : map) {
if (k.second.type() != typeid(nullptr)) {
std::cout << k.first << " : " << boost::any_cast<int>(k.second) << std::endl;
}
}

До C ++ 11 у меня было boost::any завернутый в структуру с bool isset, но это, кажется, работает. Есть подводные камни?

2

Решение

Я не вижу никаких подводных камней как таковых (за исключением того, чтобы специально установить его nullptr_t а не любой другой тип указателя); но почему бы не оставить его пустым и проверить его empty() функция-член?

5

Другие решения

Других решений пока нет …