|
現: 2016-10-05 (水) 22:37:59 takatsuka  |
| | + | C++ は(も)使い続けてないと(使い続けていても)書式を忘れてしまいます。・・老化かな・・。 |
| | + | というわけで、template クラスの中の template クラスの static 変数の実体や関数の中身を別に記述するとき、どうやって書くんだったっけ・・と悩んだ時のためにリファレンスコードとして残しておきます。 |
| | | | |
| | + | #prettify{{ |
| | + | |
| | + | // ↓いくらネストしてようと定義するだけは難しいことなく書ける。 |
| | + | |
| | + | 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(); |
| | + | } |
| | + | }} |
| | + | |
| | + | 以上、だいぶ以前に書いたブログの記事を引っ張ってきました。 |
- 技術系備忘録/C++/小技/templateクラスの中のtemplateクラスの書き方 のバックアップ差分(No. All)
Counter: 4504,
today: 2,
yesterday: 0