模板类中模板方法的朋友,在模板类中

时间:2012-04-09 20:09:16

标签: c++ templates c++11 friend

描述可能令人难以置信,所以我直截了当地说明了这个例子:

#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。

1 个答案:

答案 0 :(得分:1)

template<class x> template<class y> friend void fr<x>::callsomeone();

你不应该向callomeone传递任何模板参数,因为你想成为一个函数模板,而不是它的特化(换句话说,你想成为它的所有特化)。