相关疑难解决方法(0)

声明模板类的模板友元函数

我有一个类模板Obj和一个函数模板make_obj. Obj有一个private构造函数定义,它引用其绑定的模板类型.

template <typename T>
class Obj {
  private:
    T& t;
    Obj(T& t)
        : t{t}
    { }
};

template <typename T>
Obj<T> make_obj(T& t) { 
    return {t};
}
Run Code Online (Sandbox Code Playgroud)

我想要的是声明make_obj函数a,friend以便它可以创建Obj,但没有其他人可以(除了通过复制ctor).


我已经尝试了几个朋友声明,包括

friend Obj make_obj(T&);
Run Code Online (Sandbox Code Playgroud)

template <typename T1, typename T2>
friend Obj<T1> make_obj(T2&);
Run Code Online (Sandbox Code Playgroud)

后者是完成该类make_obj朋友的所有模板实例化的不太理想的尝试Obj.但是在这两种情况下我都会得到同样的错误:

error: calling a private constructor of class 'Obj<char const[6]>'
    return {t};
           ^

note: in instantiation of function template specialization
      'make_obj<const …
Run Code Online (Sandbox Code Playgroud)

c++ templates friend c++11

31
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×1

c++11 ×1

friend ×1

templates ×1