C++ C++;pimpI互斥防止使用std::Condition\u变量
C++/CLI已知在使用-clr:pure或clr标志编译项目时会阻止互斥体头。 这里报告了错误 建议的解决方案似乎是使用C++ C++;pimpI互斥防止使用std::Condition\u变量,c++,c++11,c++-cli,std,pimpl-idiom,C++,C++11,C++ Cli,Std,Pimpl Idiom,C++/CLI已知在使用-clr:pure或clr标志编译项目时会阻止互斥体头。 这里报告了错误 建议的解决方案似乎是使用pimpI模式。看这里 我看到的问题是当使用其他std函数时。 例如,考虑 STD::条件变量 mutexPimpI _mut; std::unique_lock<mutexPimpI> lk(_mut); //Fine std::unique_lock is templated. std::condition_variable _gate1; _gate1
pimpI
模式。看这里
我看到的问题是当使用其他std
函数时。
例如,考虑<代码> STD::条件变量
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
mutexpinpi\u mut;
std::唯一锁lk(_mut)//Fine std::模板化了唯一的_锁。
std::条件变量门1;
_网关1.等待(lk)//错误等待需要std::unique_lock作为参数
有什么简单的方法可以解决这个问题吗?您可以尝试使用递归互斥类,因为对象不会被锁定。
也可以参考这个。我通过向前声明std::condition\u变量解决了这个问题。 VisualStudio的互斥包含编译器的问题仅限于头。
包含在源文件中仍然有效。问题是,如果使用-clr:pure标志编译,则根本不允许包含互斥。