2017-11-02 2 views
1

ネイティブC++ "ああ":<thread>をC++/CLIコードに含まれているコードに使用します。よりよい解決策を探してい

#include <thread> 

class a 
{ 
    //... 
private: 
    // ... 
    std::mutex mutex; 
}; 

C++/CLI:

#include "a.h" // error cause thread is included 

私の解決策:

ネイティブC++ "ああ":

class a 
{ 
    a(); 
    ~a(); 
    //... 
private: 
    // ... 
    void* mutex; 
}; 

"a.cpp"

#include <thread> 

a::a() 
{ 
    mutex = new std::mutex; 
} 

~a::a() 
{ 
    delete mutex; 
} 

C++/CLI:動的なメモリ割り当てずにこれを行う方法を

#include "a.h" // no error 
  1. これは安全ですか?私は何とか<スレッドからラップされたものを使用します> C++/CLI環境では、ヘッダにはありません。
  2. 良いアプローチがありますか?新しい/削除し、すべての使用のキャストは悪いようです。クラスのオブジェクトごとに1つのミューテックスが必要です。
+0

解決策を提示するだけでなく、達成したいことを説明する必要がある場合は、より良い解決策を求めてください。動的メモリ割り当てがない場合'mutex * 'の代わりに' mutex'を使うだけですか? – user463035818

+0

「ミューテックスの代わりにミューテックスを使用するだけです」* Ok。どうやって? – lars

+1

PIMPLイディオム。 http://en.cppreference.com/w/cpp/language/pimpl –

答えて

-1

テンプレートはあなたを助けるためにここにあります!

ああ:そして

template <class MutextType> 
class a 
{ 
    //... 
private: 
    // ... 
    MutextType mutex; 
}; 

そして、中にあなたのメインまたはどこ:

#inculde <thread> 
//... 
a<std::mutex> instance; 

そして、あなたはまた、あなたがしたい場合はクリーンなコードのために、クリーンアップするステートメントを使用して使用することができます。

関連する問題