使用std :: mutex关闭头文件的clr选项

时间:2015-07-11 16:18:43

标签: c++ .net visual-studio c++11 clr

我有一个Visual Studio项目,其中包含带有托管代码的文件和带有非托管代码的文件。该项目具有CLR支持,但是当我添加一个不需要.NET的文件时,只需右键单击该文件即可关闭/ crl选项:

enter image description here

我添加了一个必须包含非托管代码并使用std :: mutex的类。

// Foo.h
class Foo
{
   std::mutex m;
}

编译后出现以下错误:

  

错误C1189:编译时不支持#error:   / clr或/ clr:pure。

问题是我没有关闭头文件(.h)的clr的选项,因为这是我右键单击.h文件时的窗口:

enter image description here

如何解决此问题?

1 个答案:

答案 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())
{
}