c++ - 模板类中模板方法的友元,在模板类中

标签 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> 只有的 friend fr<bool>::callsomeone<int> , 不是 fr<bool>::callsomeone<char>或其他人。

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

最佳答案

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

你不应该将任何模板参数传递给 callsomeone,因为你想要友好一个函数模板,而不是它的特化(换句话说,你想友好它的所有特化)。

关于c++ - 模板类中模板方法的友元,在模板类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10079136/

相关文章:

c++ - initializer_list和move语义

c++ - 模板部分特化防止从派生类初始化

c++ - 更新 Apple g++/gcc

c++ - 如何在开始时停止程序以将GDB附加到该程序?

c++ - 比较c++中的两个数组并根据元素的匹配或不匹配返回值

c++ - 制作可变参数异常构造函数以填充字符串流

C++ 模板,vector.size 用于默认参数定义

c++ - 使用 std::accumulate 算法和 lambda 表达式对元素进行计数

c++ - 使用 std::function 保证没有动态内存的最小语法

c++ - 重铸 const 函数