C++ pimpI 互斥体阻止使用 std::condicition_variable

C++ pimpI mutex preventing usage of std::condicition_variable

C++/CLI 已知会在使用 -clr:pure 或 clr 标志编译项目时阻止互斥锁 header。 这里报错 https://social.msdn.microsoft.com/Forums/vstudio/en-US/d4d082ff-ce43-478d-8386-0effed04b108/ccli-and-stdmutex?forum=vclanguage

推荐的解决方案似乎是使用 pimpI 模式。看这里

我看到的问题是在使用其他 std 函数时。 例如考虑 std::condition_variable

mutexPimpI _mut;
std::unique_lock<mutexPimpI> lk(_mut); //Fine std::unique_lock is templated.
std::condition_variable _gate1;
_gate1.wait(lk); //Error wait expects std::unique_lock<std::mutex> as argument

有什么简单的方法可以解决/解决这个问题吗?

您可以尝试使用 recursive__mutex class 因为对象不会被锁定。 https://msdn.microsoft.com/en-us/library/hh921466.aspx 也参考这个。

我通过前向声明std::condition_variable解决了它。 Visual Studio 的互斥包含编译器的问题仅适用于 headers。 包含在源文件中仍然有效。