'使用'的候选标准函数

时间:2011-04-01 07:58:03

标签: c++ generics idioms

我知道using std::swap通过ADL使用用户定义的swap函数的技术,但我不知道这也应该应用于其他一些函数。例如,我在模板代码中写了一些std::abs,我应该使用类似的东西:

template <class Int> void f(Int i) {
    using std::abs;
    Int j = abs(i);
    // ...
}

您能想到哪种标准功能应该以这种方式使用?

旁注:当包含abs时,g ++会将cstdlib置于全局命名空间中(实际上ctsdlib包含stdlib.h(定义函数 abs)并执行#undef abs ...),标准是什么意思?

1 个答案:

答案 0 :(得分:1)

这来自标准:

  

3.4.6使用指令和命名空间别名
  [basic.lookup.udir]
  在using-directive或中查找namespace-name时   namespace-alias-definition,only namespace   名字被认为。

因此,您可以使用关键字using将变量,类型和函数导入当前命名空间。


修改

您可以将任何您喜欢的内容导入当前命名空间,但是您应该关注命名空间的压缩,因此尽量不要在标头中使用using,而只能在源文件中使用{{1}}。

理想情况下,您不应该使用此关键字。我有时会使用深度嵌套的命名空间。