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

2019-04-20 18:02发布

问题:

I have a Visual Studio project that contains files with managed code and files with unmanaged code. The project has the CLR support, but when I add a file where I do not need .NET I simply turn off the /crl option with a right-click on the file:

I added a class that has to contain unmanaged code and use std::mutex.

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

I got the following error after compiling:

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

The problem is that I do not have the option to turn off the clr for header files (.h), since this is the window when i right-click on a .h file:

How can I fix this problem?

回答1:

There is the possibility to use the workaround known as the Pointer To Implementation (pImpl) idiom.

Following is a brief example:

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