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