Boost和Qt库中有哪些名称空间标识符?

时间:2011-11-26 22:02:15

标签: c++ qt boost namespaces

我最近开始使用boost和Qt。我想知道是否所有Boost库(头文件)都包含在一个命名空间中:Boost?或者是否还有一些其他命名空间?

同样的Qt问题,看起来Qt库根本没有命名空间? 所以我开始使用这些标志构建Qt:

  

configure -shared -debug-and-release -ltcg -qtnamespace qt nmake

可以吗?

3 个答案:

答案 0 :(得分:1)

通常,是的 - 所有boost声明都在全局::boost命名空间下。

但是,我知道一个例外:

bind-expression占位符_1_2等位于全局“匿名”命名空间中,因此正确引用为:

boost::bind(&f, ::_1, ::_2);

请注意,这些占位符没有外部链接并且是静态的(翻译单元的本地)

答案 1 :(得分:1)

我经常使用boost::matrix::ublas,但是boost有很多名称空间。您可以在特定的boost子目录中运行您关注的命令的变体:

grep namespace * | sed -e 's/.*namespace//' -e 's/\/\/.*//' -e 's/ *{.*//' | sort | uniq

您的问题通常应该是:哪些命名空间适合在我当前的项目中使用?即什么名称空间看起来很有用,但实际上是内部提升的东西。

通常,用户不应该在boost的详细命名空间内需要任何内容​​,但您也会发现其他命名空间也用于实现细节。 boost::math::tr1除了导入普通的C数学函数之外什么都不做。

答案 2 :(得分:0)

是的,Boost库通常将其内容放在boost名称空间或其子名称空间中。一些可能定义全局符号,但文档会告诉您是否属于这种情况。

Qt对名称空间的使用非常有限。它更喜欢用Q或Qt为其所有符号添加前缀,尽管它对某些标识符使用Qt命名空间,也可能使用其他标识符。