我最近开始使用boost和Qt。我想知道是否所有Boost库(头文件)都包含在一个命名空间中:Boost?或者是否还有一些其他命名空间?
同样的Qt问题,看起来Qt库根本没有命名空间? 所以我开始使用这些标志构建Qt:
configure -shared -debug-and-release -ltcg -qtnamespace qt nmake
可以吗?
答案 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
命名空间,也可能使用其他标识符。