ページへ戻る

− Links

 印刷 

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

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

  
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)