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

Turn off clr option for header file with std::mutex

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

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

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

编译后出现如下错误:

error C1189: #error : is not supported when compiling with /clr or /clr:pure.

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

我该如何解决这个问题?

可以使用称为 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())
{
}