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

标签 c++

我想包含 std::unique_lock 和 header 中的一些其他名称,但不包括 std::mutex 和其他名称(如果您好奇的话,我在 Relacy Race Detector 中有不同的声明 - ) 。这导致编译错误。我怎样才能做到这一点?

编辑:包含 RRD 和 时发生的编译器错误是:

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

最佳答案

您可以#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。如果您关心全局命名空间中的内容,则可以将上述代码包装在其自己的命名空间中。

关于c++ - 解决包含冲突(重新定义)或如何有选择地包含声明的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9558421/

相关文章:

C++ - 具有私有(private)参数的构造函数继承

c++ - 如何为一个类添加一个异常处理程序?

c++ - XMMATRIX Decompose 不提供正确的比例、旋转和平移

c++ - 在知道墙壁在哪里的同时计算房间

c++ - 使用仅指定一维的多维数组

c++ - Clang 无法使用 libstdc++ 识别 std::shared_ptr

c++ - 如何声明指针成员禁止删除它

c++ - Boost:如何将 "true"或 "1"之类的字符串转换为 bool true,将 "0"或 "false"转换为 bool false?

c++ - 在 C 代码中使用 boost::bind() 会起作用吗?

c++ - 用于捕获线程 CPU 时间的 API