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: 3880,
today: 1,
yesterday: 2
初版日時: 2016-07-19 (火) 17:38:42
最終更新: 2016-07-19 (火) 17:38:42 (JST) (3471d) by takatsuka
