Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;pimpI互斥防止使用std::Condition\u变量_C++_C++11_C++ Cli_Std_Pimpl Idiom - Fatal编程技术网

C++ C++;pimpI互斥防止使用std::Condition\u变量

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

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.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标志编译,则根本不允许包含互斥。