|
現: 2016-07-19 (火) 17:38:42 takatsuka |
| + | 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)
Counter: 3641,
today: 1,
yesterday: 1