static メンバ変数を持ったクラスは、static 変数の実体を記述する為、cpp ファイル(ソースファイル)が必要になってしまいがちです。
-ヘッダファイルと cpp ファイルで記述する版
--test.h
#prettify{{
class CTest
{
static const char* m_text;
public:
const char* GetText()const
{
return m_text;
}
};
}}
--test.cpp
#prettify{{
#include "test.h"
const char* CTest:m_text = "abc";
}}
おそらく、普通に書くとこんな感じ↑になると思います。
がしかし、クラスライブラリとして、ヘッダファイルだけで完結させたいケースもあると思います。
そういう場合は、テンプレートクラスにしてしまうと解決します。
-ヘッダファイルのみで記述する版
--test.h
#prettify{{
template <int T> class CTestT
{
static const char* m_text;
public:
const char* GetText()const
{
return m_text;
}
};
template <int T> const char* CTestT<T>::m_text = "abc";
typedef CTestT<0> CTest;
}}
ヘッダインクルードだけで使えるクラスは、何かと便利です。
コンパイルが遅くなるなどデメリットも考慮したうえで、上手に使うと吉かなと思います。
- 技術系備忘録/C++/小技/staticメンバ変数を持つクラスをヘッダファイルのみで実現 のバックアップソース(No. All)