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

Fad*_*mic 2 c++ boost-any c++11

如果我使用设置通用容器映射boost::any,并使用nullptrC++ 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在C++ 11之前,我把它boost::any包装在带有a的结构中bool isset,但这似乎有效.任何陷阱?

Mik*_*our 6

我不能看到任何陷阱(除了小心专门设置它nullptr_t而不是任何其他指针类型); 但为什么不把它留空,并用它的empty()成员函数检查它?

  • 阿克 我可以给出一个详尽的理由,说明为什么我不使用`empty()`成员,但是事实是我……直到现在还是以某种方式错过了该功能。鸡蛋在我的脸上。 (2认同)