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

C++ は(も)使い続けてないと(使い続けていても)書式を忘れてしまいます。・・老化かな・・。
というわけで、template クラスの中の template クラスの static 変数の実体や関数の中身を別に記述するとき、どうやって書くんだったっけ・・と悩んだ時のためにリファレンスコードとして残しておきます。

// ↓いくらネストしてようと定義するだけは難しいことなく書ける。

template <typename TA> struct ClassA
{
    template <typename TB> struct ClassB
    {
        static const TB id;
        template <int TC> struct ClassC
        {
            static int Func();
        };
    };
};

// ↑のようなネストした定義の実体の書き方は以下↓。これが出てこなくて毎度躓く。

template <typename TA> template<typename TB> const TB ClassA<TA>::ClassB<TB>::id = 999;

template <typename TA> template<typename TB> template<int TC> int ClassA<TA>::ClassB<TB>::ClassC<TC>::Func()
{
    return TC * TC;
}

// で、使う場合はこんな感じ↓で難しいことなく書ける。

void Func()
{
    long i = ClassA<int>::ClassB<long>::id;
    int n = ClassA<double>::ClassB<float>::ClassC<1>::Func();
}

以上、だいぶ以前に書いたブログの記事を引っ張ってきました。


トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 673, today: 3, yesterday: 0
初版日時: 2016-10-05 (水) 22:37:59
最終更新: 2016-10-05 (水) 22:37:59 (JST) (432d) by takatsuka