Dav*_*son 3 c++ boost namespaces operators
我尽量避免在我的C++中使用"使用命名空间"来避免污染我的命名空间.但是,我想利用boost赋值运算符来做这样的事情:
std::vector tmp; tmp += "abc","def","asdf","foo","blah","dfkef";
不添加"using namespace boost :: assign;" 这会产生错误:
error: no match for 'operator+=' in 'tmp += "abc"'
有没有办法在不使用命名空间的情况下在boost中使用这些运算符?
pae*_*bal 13
你错误地认为它会污染名称空间:这个using namespace
功能是为这种用途而创建的.
它只会"污染" using namespace
宣布的范围,在这种情况下,利益(使用运营商)远远大于缺点(这种"污染"与范围的大小可以忽略不计).
例如,您可以:
void foo()
{
// no symbol of boost::assign is polluting here
std::vector tmp;
{
using namespace boost::assign ;
// brings in this scope all the symbols of boost::assign
tmp += "abc","def","asdf","foo","blah","dfkef";
}
// no symbol of boost::assign is polluting here
}
Run Code Online (Sandbox Code Playgroud)
你应该决定using namespace
它带来的语法糖与它可能带来的潜在污染之间的平衡.
一个很好的妥协可能是将它限制在一个函数体,或者,如果你像我一样偏执,为这个using
声明创建一个范围......
作为一个有趣的旁注,最糟糕的解决方案是将使用放在带有导出符号的公共标题中.
归档时间: |
|
查看次数: |
599 次 |
最近记录: |