C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 56 を表示中)
■31437 / )  Re[1]: template を使ったクラスについて
□投稿者/ 774RR (297回)-(2009/01/22(Thu) 08:47:45)
後者の BBB や func をどう実用的に使いうるのか微妙に疑問が残るところだけど
まあ単純に技術的解説に絞ってみよう

後者でダメと書かれているほうの func は「非メンバー関数」なのだが、そこは理解できているかい?
どれかのクラスに属しているわけではない関数 main とか printf とかと同じ扱いなわけだ。
struct foo {
  int func(); // これは foo::func
};
int func(); // これは非メンバ func
提示コード後者は、こういう状況になっているわけだ。この2つの func は無関係な独立した存在。

つーことで、やりたいことがメンバー関数 func の定義を、クラス定義外で行うことであるとするなら
書き方の方針はこういうことになる
1.メンバー関数 func は AAA のメンバーである → AAA::func と書かなきゃならない
2.AAA は実は template であるため AAA<T> と書かなきゃならない
3.func の返却値の型は BBB なんだが、これは AAA の型だから AAA<T>::BBB と書く必要がある
と、この順に考え+実装していくことになる

1.の時点で *** AAA::func() { ... } と書ける。
  この時点で返却値の型はまだ考えていないので *** と適当にごまかしておく
2.を適用して *** AAA<T>::func() { ... } と修正
3.を適用して AAA<T>::BBB AAA<T>::func() { ... } となる
4.全体を template 化して
template<typename T> AAA<T>::BBB AAA<T>::func() { ... } で完了。

返信 編集キー/


管理者用

- Child Tree -