描述可能令人难以置信,所以我直截了当地说明了这个例子:
#include <iostream>
#include <typeinfo>
using namespace std;
template<typename T> class fr{
static void privatestuff(){
cout<<"private of "<<typeid(T).name()<<endl;
}
public:
template<typename TT> void callsomeone(){
fr<TT>::privatestuff();
}
//template<typename TT> friend void fr<TT>::callsomeone<T>();
//template<> template<typename TT> friend void fr<TT>::callsomeone<T>();
//template<typename TT> template<> friend void fr<TT>::callsomeone<T>();
//no other combinations... how to get it?
};
int main(){
fr<bool> obj;
obj.callsomeone<int>();
}
基本上,我希望fr能够呼叫fr<int>::privatestuff
。但是我也希望不要暴露更多内容,所以只要 fr<int>
的朋友fr<bool>::callsomeone<int>
,而不是fr<bool>::callsomeone<char>
或其他人。
如果需要,我可以指望c ++ 11。
答案 0 :(得分:1)
template<class x> template<class y> friend void fr<x>::callsomeone();
你不应该向callomeone传递任何模板参数,因为你想成为一个函数模板,而不是它的特化(换句话说,你想成为它的所有特化)。