4
get
は、outer<T>::inner<U>
の専用コンストラクタにアクセスできる囲みスコープ内の関数を作成するにはどうすればよいですか?私はinner
を作ることによって、クラスの外にそれを宣言しようとしているテンプレート関数をテンプレート付きネストされたクラスのフレンドに宣言するには?
template <typename T>
struct outer {
template <typename U>
class inner {
inner() {}
public:
friend inner get(outer&) {
return {};
}
};
};
int main() {
outer<int> foo;
outer<int>::inner<float> bar = get<float>(foo);
}
はtemplate <typename V, typename W> friend inner<V> get(outer<W>&);
持っているが、それはどちらか動作しませんでした。私はinner
を作ることによって、クラスの外にそれを宣言しようとしている
神。 – user975989
実際には、友人定義は、通常、事前にクラス外宣言がない限り、ADLを介してのみアクセス可能です。ここで同じ効果を達成する方法はありますか? – user975989
@ user975989あなたはクラス外の定義を提供したくないということですか? – songyuanyao