メニュー
ブログ更新履歴
コンテンツ更新履歴
リンク
  • Magome
  • クラウドベースのMIDIシーケンサ
    音楽制作に興味のある方を対象に、スタンドアロンでも使え、ネットならではの面白さも兼ね備えた音楽制作アプリの提供を目指しています。
twitter

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;

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


Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 1181, today: 1, yesterday: 2
Princeps date: 2016-07-19 (Tue) 17:38:42
Last-modified: 2016-07-19 (Tue) 17:38:42 (JST) (1007d) by takatsuka