0

描述可能令人难以置信,所以我直接进入示例:

#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. 但我也希望不要暴露超出需要的内容,因此与only、 not或其他人交fr<int>朋友。 fr<bool>::callsomeone<int>fr<bool>::callsomeone<char>

如果需要,我可以依靠 c++11。

4

1 回答 1

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

您不应将任何模板参数传递给 callsomeone,因为您想与函数模板交朋友,而不是它的特化(换句话说,您想与它的所有特化交朋友)。

于 2012-04-09T20:14:01.937 回答