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(); }
以上、だいぶ以前に書いたブログの記事を引っ張ってきました。
Page Info | |
---|---|
Page Name : | 技術系備忘録/C++/小技/templateクラスの中のtemplateクラスの書き方 |
Page aliases : | None |
Page owner : | takatsuka |
Can Read | |
Groups : | All visitors |
Users : | All visitors |
Can Edit | |
Groups : | No one |
Users : | No one |
Counter: 4346,
today: 1,
yesterday: 1
Princeps date: 2016-10-05 (Wed) 22:37:59
Last-modified: 2016-10-05 (Wed) 22:37:59 (JST) (3092d) by takatsuka