gpt4 book ai didi

c++ - 有没有一种方法可以在不污染命名空间的情况下使用 boost::assign 运算符?

转载 作者:太空狗 更新时间:2023-10-29 19:44:45 26 4
gpt4 key购买 nike

我尽量避免在我的 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 中使用这些运算符?

最佳答案

您假设它会污染命名空间是错误的: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
}

您应该在 using namespace 带来的语法糖和它可能带来的潜在污染之间做出平衡。

一个好的折衷方案可能是将它限制在一个函数体中,或者,如果你像我一样偏执,那么只为这个 using 语句创建一个范围......

作为一个有趣的旁注,最糟糕的解决方案是将 using 放在带有导出符号的公共(public) header 中。

关于c++ - 有没有一种方法可以在不污染命名空间的情况下使用 boost::assign 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4892662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com