Если я настроил общую карту контейнера с помощью 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
, но это, кажется, работает. Есть подводные камни?
Я не вижу никаких подводных камней как таковых (за исключением того, чтобы специально установить его nullptr_t
а не любой другой тип указателя); но почему бы не оставить его пустым и проверить его empty()
функция-член?
Других решений пока нет …