简体   繁体   中英

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

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?

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM