私はVisual Studio 2008 SP1でコンパイルされる古いプロジェクトのテンプレートクラスを作成しています。テンプレートクラスは、実行中の複数のプロセスのうちnamed file-mapping objectで共有されるデータstruct
を使用します。したがって、私のIPC_SHARED_DATA
メンバーの条件は、コンストラクタを持たないプリミティブなデータ型だけを含むことです。テンプレートクラスメンバーをC++ 03のプリミティブ型のみにすることはできますか?
struct IPC_SHARED_DATA{
//IMPORTANT: All members should not have constructors!
int nVal;
DWORD dwVal;
BYTE bytes[16];
};
の質問は、私は私のIPC_SHARED_MEM
テンプレートクラス内の条件として設定することができ、ありますか?
template <class DATA_T>
class IPC_SHARED_MEM
{
public:
IPC_SHARED_MEM()
: hMutexIpc(NULL)
, hSharedMemIpc(NULL)
{
//Initialization
//...
}
~IPC_SHARED_MEM()
{
}
// ... other functions
private:
DATA_T data; //Data being passed in shared memory
HANDLE hMutexIpc; //IPC named mutex for synchronized access to 'data'
HANDLE hSharedMemIpc; //IPC named file mapping object handle
};
そして、それがそのまま使用されます。
IPC_SHARED_MEM<IPC_SHARED_DATA> globalSharedMem;
明らかに 'std :: is_pod'は疑問ですが、[' boost :: is_pod'](http://www.boost.org/doc/libs/1_65_1/libs/)についてはどうでしょうか? type_traits/doc/html/boost_typetraits/reference/is_pod.html) – Tas
@Tas:Boostは使用しません。その方法はどのように実装されていますか? – c00000fd
プリミティブ型のテンプレートを特殊化してみませんか?なぜ型がないので、 'IPC_SHARED_MEM'は' IPC_SHARED_DATA'へのポインタを使うだけでしょうか? –