Back to page

 Print 

技術系備忘録​/C++​/staticメンバ変数を持つクラスをヘッダファイルのみで実現 :: シンクリッジ

xpwiki:技術系備忘録/C++/staticメンバ変数を持つクラスをヘッダファイルのみで実現

static メンバ変数を持ったクラスは、static 変数の実体を記述する為、cpp ファイル(ソースファイル)が必要になってしまいがちです。

  • ヘッダファイルと cpp ファイルで記述する版
    • test.h
      class CTest
      {
      	static const char* m_text;
      public:
      	const char* GetText()const
      		{
      			return m_text;
      		}
      };
    • test.cpp
      #include "test.h"
      
      const char* CTest:m_text = "abc";
      

おそらく、普通に書くとこんな感じ↑になると思います。

がしかし、クラスライブラリとして、ヘッダファイルだけで完結させたいケースもあると思います。
そういう場合は、テンプレートクラスにしてしまうと解決します。

  • ヘッダファイルのみで記述する版
    • 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;

ヘッダインクルードだけで使えるクラスは、何かと便利です。
コンパイルが遅くなるなどデメリットも考慮したうえで、上手に使うと吉かなと思います。


Last-modified: 2016-07-19 (Tue) 17:38:42 (JST) (1161d) by takatsuka