static メンバ変数を持ったクラスは、static 変数の実体を記述する為、cpp ファイル(ソースファイル)が必要になってしまいがちです。
- ヘッダファイルと cpp ファイルで記述する版
- test.h
class CTest { static const char* m_text; public: const char* GetText()const { return m_text; } };
- test.h
- test.cpp
#include "test.h" const char* CTest:m_text = "abc";
- test.cpp
おそらく、普通に書くとこんな感じ↑になると思います。
がしかし、クラスライブラリとして、ヘッダファイルだけで完結させたいケースもあると思います。
そういう場合は、テンプレートクラスにしてしまうと解決します。
- ヘッダファイルのみで記述する版
- test.h
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;
- test.h
ヘッダインクルードだけで使えるクラスは、何かと便利です。
コンパイルが遅くなるなどデメリットも考慮したうえで、上手に使うと吉かなと思います。
Page Info | |
---|---|
Page Name : | 技術系備忘録/C++/小技/staticメンバ変数を持つクラスをヘッダファイルのみで実現 |
Page aliases : | None |
Page owner : | takatsuka |
Can Read | |
Groups : | All visitors |
Users : | All visitors |
Can Edit | |
Groups : | No one |
Users : | No one |
Counter: 3351,
today: 1,
yesterday: 2
Princeps date: 2016-07-19 (Tue) 17:38:42
Last-modified: 2016-07-19 (Tue) 17:38:42 (JST) (2696d) by takatsuka