2

如果我使用 设置通用容器映射boost::any,并使用nullptrC++11 中的 new 作为类似于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::anystruct 包裹在带有 a 的结构中bool isset,但这似乎有效。有什么陷阱吗?

4

1 回答 1

6

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

于 2013-08-05T14:45:14.827 回答