【C++】template 統合スレ -- Part3
■ このスレッドは過去ログ倉庫に格納されています
0166デフォルトの名無しさん
NGNGテンプレートクラスを引数に取るテンプレート関数を、そのテンプレートクラスの中でfriend指定する方法で、
(ややこしい...)試行錯誤の結果以下のようにすればコンパイラが満足することが判りました。
template<typename T>
class Foo {
template<typename _T, typename U> // _Tはテンプレート引数の二重宣言エラーを防ぐため
friend void func(const Foo<_T> &, const U &);
};
template<typename T, typename U>
void func(const Foo<T> &f, const U &u) { ... }
これは正しい書き方なのでしょうか?動いているから正しいのかもしれませんが、
friendして欲しいテンプレートクラス「のみ」引数に取る場合のオーソドックスなやり方...
template<typename T>
class Foo {
friend void func<T>(const Foo &);
};
template<typename T>
void func(const Foo<T> &f) { ... }
とあまりに見た目が違うので違和感を覚えます。
なおgcc3でコードは通っています。
■ このスレッドは過去ログ倉庫に格納されています