解决包括冲突(重新定义)或如何有选择地包括声明的成员

时间:2012-03-04 20:14:14

标签: c++

我想在< mutex>中包含std :: unique_lock和其他一些名称。标题,但不是std :: mutex和其他名称(我有一个不同的声明 - 如果你很好奇,在Relacy Race Detector中)。这导致编译错误。我怎么能这样做?

编辑:RRD和< mutex>时出现的编译器错误包括:

error C2371: 'rl::condition_variable' : redefinition; different basic types C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\mutex    58  1   test_hashtable
error C2371: 'rl::mutex' : redefinition; different basic types  C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\mutex    100 1   test_hashtable
error C2371: 'rl::recursive_mutex' : redefinition; different basic types    C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\mutex    114 1   test_hashtable

1 个答案:

答案 0 :(得分:3)

你可以#include RRD进入自己的命名空间:

namespace RRD {
  #include <rrd.h>
}

这应该有效,除非RRD引用全局命名空间函数(例如::isalnum)。

然后,将类导入当前命名空间:

#ifdef DETECT_RACE_CONDITIONS
using RRD::std::mutex;
#else
using std::mutex;
#end
using std::unique_lock;

最后,在代码中使用mutex,而不是std::mutex。如果您关心生活在全局命名空间中的事物,可以将上面的代码包装在自己的namespace中。