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
ヘッダインクルードだけで使えるクラスは、何かと便利です。
コンパイルが遅くなるなどデメリットも考慮したうえで、上手に使うと吉かなと思います。
ぺージ情報 | |
---|---|
ぺージ名 : | 技術系備忘録/C++/小技/staticメンバ変数を持つクラスをヘッダファイルのみで実現 |
ページ別名 : | 未設定 |
ページ作成 : | takatsuka |
閲覧可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |
編集可 | |
グループ : | なし |
ユーザー : | なし |
Counter: 3454,
today: 1,
yesterday: 3
初版日時: 2016-07-19 (火) 17:38:42
最終更新: 2016-07-19 (火) 17:38:42 (JST) (2837d) by takatsuka