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();
}
以上、だいぶ以前に書いたブログの記事を引っ張ってきました。
| ぺージ情報 | |
|---|---|
| ぺージ名 : | 技術系備忘録/C++/小技/templateクラスの中のtemplateクラスの書き方 |
| ページ別名 : | 未設定 |
| ページ作成 : | takatsuka |
| 閲覧可 | |
| グループ : | すべての訪問者 |
| ユーザー : | すべての訪問者 |
| 編集可 | |
| グループ : | なし |
| ユーザー : | なし |
Counter: 4549,
today: 3,
yesterday: 4
初版日時: 2016-10-05 (水) 22:37:59
最終更新: 2016-10-05 (水) 22:37:59 (JST) (3393d) by takatsuka
