加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 有没有办法在不污染名称空间的情况下使用boost :: assign运

发布时间:2020-12-16 10:28:45 所属栏目:百科 来源:网络整理
导读:我尽量避免在我的C中使用“使用命名空间”以避免污染我的命名空间.但是,我想利用boost赋值运算符来做这样的事情: std::vector tmp;tmp += "abc","def","asdf","foo","blah","dfkef"; 不添加“using namespace boost :: assign;”这会产生错误: error: no m
我尽量避免在我的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中使用这些运算符?

解决方法

你认为它会污染命名空间是错误的:使用命名空间功能是为这种用途而创建的.

它只会“污染”声明使用命名空间的范围,在这种情况下,好处(使用运算符)远远大于缺点(这种“污染”与范围的大小一样可以忽略不计).

例如,您可以:

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","dfkef";
   }

   // no symbol of boost::assign is polluting here
}

你应该确定使用命名空间带来的语法糖与它可能带来的潜在污染之间的平衡.

一个很好的妥协可能是将它限制在一个函数体,或者,如果你像我一样偏执,为这个使用语句创建一个范围……

作为一个有趣的旁注,最糟糕的解决方案是将使用放在带有导出符号的公共标题中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读