Daniel Frey의 대답 덕분에 this post에 대한 답변 덕분에 같은 템플릿 매개 변수로 템플릿 클래스에 템플릿 friend 함수를 선언하는 방법을 알았습니다. 아쉽게도 추가 템플릿 매개 변수를 사용하여 친구 함수를 선언하는 구문은 여전히 나를 벗어납니다.새 템플릿 매개 변수를 소개하는 템플릿 클래스의 템플릿 friend 함수
template <typename T>
class Obj;
template <typename T>
Obj<T> make_obj(T t);
template <typename T, typename RetVal>
RetVal ret_obj(T t);
template <typename T>
class Obj {
private:
T & t;
Obj (T & t) : t(t) { }
Obj() = delete;
friend Obj make_obj<T>(T t);
template <typename RetVal>
friend RetVal ret_obj<T, RetVal>(T t);
};
template <typename T>
Obj<T> make_obj(T t) {
return Obj<T>(t);
}
template <typename T, typename RetVal>
RetVal ret_obj(T t) {
return RetVal(make_obj(t).t);
}
내가 같은 질문이 이미 this post에 요청 된 것으로 알고 있지만, 허용 대답은 내가 원하는 것을 할 수없는 것 : T2
차종에 매개 변수 이름을 변경하는 나는 이런 식으로 뭔가를 달성하고 싶습니다 함수는 모든 객체의 전문화의 친구이고, 나는 계속하고 싶습니다. T
은 클래스와 같습니다.
짐작할 수 있듯이 "나는 할 수 없다"라고 말하고 싶습니다. 도우미'struct'를 통해 함수를 수신 거부하는 것과 같이 작동하게하는 해결 방법이있을 것입니다. – Yakk
불가능합니다. 프렌드 선언은 부분 전문화를 선언 할 수 없습니다. –
@Yakk 그래, 내가 다른 수업을 쓸 수 있다고 생각 했어. 나는 이것을하기위한 직접적인 방법이 있는지 의아해했다. 그렇지 않으면 너무 나쁘다. : –