은 가정하자 나는, 나는만들기 특정 전문 분야
template<class T>
void f(T t);
및
template<class T>
class X
{
};
난 단지 f<T>
이 X<T>
의 친구가되고 싶은 경우
template<class T>
class X
{
friend void f<>(T t);
};
이제 f가 다음과 같이 선언되었다고 가정 해보십시오.
template<class T, class U>
void f(T t, U u);
나는 다음과 같은 선언 할 : 모든 유형의 U
f<T, U>
이 X<T>
의 친구입니다. 그래서 f<int, char>
은 X<int>
의 친구가되고 싶지만, f<char, int>
은 X<int>
의 선물이되고 싶지 않습니다. 이것이 가능한가? 다음은 컴파일되지 않는 것 같습니다
template<class T>
class X
{
template <class U>
friend void f<>(T t, U, u);
};
전체 템플릿을 친구로 선언하는 방법을 알고 있습니다.
일부 기능 템플릿 특수화가 필요합니다. 그리고 그것들은 허용되지 않기 때문에, 나는 이것이 가능하다는 것을 의심합니다. – jrok
@jrok : 그건 지금까지 내 의혹입니다. 그러나 C++은 놀라움으로 가득합니다. 누군가가 올바른 구문을 만들거나 (표준에 의해) 그것이 불가능하다는 것을 증명하기를 희망합니다. –