現: 2016-07-19 (火) 17:38:42 takatsuka[3] [4] | |||
---|---|---|---|
Line 1: | Line 1: | ||
+ | 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; | ||
+ | }} | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ヘッダインクルードだけで使えるクラスは、何かと便利です。 | ||
+ | コンパイルが遅くなるなどデメリットも考慮したうえで、上手に使うと吉かなと思います。 |
(This host) = https://thinkridge.com