我有一个Visual Studio项目,其中包含带有托管代码的文件和带有非托管代码的文件。该项目具有CLR支持,但是当我添加一个不需要.NET的文件时,只需右键单击该文件即可关闭/ crl选项:
我添加了一个必须包含非托管代码并使用std :: mutex的类。
// Foo.h
class Foo
{
std::mutex m;
}
编译后出现以下错误:
错误C1189:编译时不支持#error: / clr或/ clr:pure。
问题是我没有关闭头文件(.h)的clr的选项,因为这是我右键单击.h文件时的窗口:
如何解决此问题?
答案 0 :(得分:8)
可以使用称为Pointer To Implementation (pImpl) idiom的解决方法。
以下是一个简短的例子:
// Foo.h
#include <memory>
class Foo
{
public:
Foo();
// forward declaration to a nested type
struct Mstr;
std::unique_ptr<Mstr> impl;
};
// Foo.cpp
#include <mutex>
struct Foo::Mstr
{
std::mutex m;
};
Foo::Foo()
: impl(new Mstr())
{
}