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