我想在< 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
答案 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
中。