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

Nic*_*ick 10 .net c++ clr visual-studio c++11

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

在此输入图像描述

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

// Foo.h
class Foo
{
   std::mutex m;
}
Run Code Online (Sandbox Code Playgroud)

编译后我收到以下错误:

错误C1189:使用/ clr或/ clr:pure进行编译时不支持#error :.

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

在此输入图像描述

我该如何解决这个问题?

gli*_*ite 8

可以使用称为指针实现(pImpl)习惯用法的解决方法.

以下是一个简短的例子:

// 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())
{
}
Run Code Online (Sandbox Code Playgroud)