ページへ戻る

− Links

 印刷 

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

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

  
現: 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;
 +}}
 +
 +
 +
 +
 +ヘッダインクルードだけで使えるクラスは、何かと便利です。
 +コンパイルが遅くなるなどデメリットも考慮したうえで、上手に使うと吉かなと思います。
  

  • 技術系備忘録/C++/小技/staticメンバ変数を持つクラスをヘッダファイルのみで実現 のバックアップ差分(No. All)