C++ nullptr作为boost::any map的标志值

C++ nullptr作为boost::any map的标志值,c++,c++11,boost-any,C++,C++11,Boost Any,如果我使用boost::any设置一个通用容器映射,并使用C++11中新的nullptr作为类似于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 err

如果我使用
boost::any
设置一个通用容器映射,并使用C++11中新的
nullptr
作为类似于
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;
    }
}
std::map;
map[“A”]=nullptr;
map[“B”]=nullptr;
map[“C”]=nullptr;
map[“D”]=nullptr;
地图[“A”]=1;
map[“C”]=3;
//假设错误检查、其他类型等。
用于(自动k:map){
if(k.second.type()!=typeid(nullptr)){

std::cout我看不到任何这样的陷阱(除了小心地将它特别设置为
nullptr\t
而不是任何其他指针类型之外);但是为什么不将它保留为空,并用它的
empty()检查它呢
member function?

从你在这里发布的代码来看,你想要的似乎是
boost::optional
,而不是
boost::any
。这很有趣,我以前没有见过。我仍然必须使用
boost::any
作为
boost::optional
的类型,因为我需要映射中的第二个值是generic.Ack.I could,呃,给出一个详细的理由,为什么我不会使用
empty()
成员,但事实是我……不知怎么地,直到现在才错过了这个函数。我脸上的蛋。