メニュー
ブログ更新履歴
コンテンツ更新履歴
リンク
  • 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();
}

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


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: 1403, today: 1, yesterday: 2
Princeps date: 2016-10-05 (Wed) 22:37:59
Last-modified: 2016-10-05 (Wed) 22:37:59 (JST) (929d) by takatsuka