如何从不同的模板实例调用模板的私有构造函数

时间:2013-02-12 21:56:06

标签: c++ templates c++11

例如:

template<class T>
class MyClass
{
public:
    template<class U>
    MyClass<U> doSomething() { return MyClass<U>(); } //can't access private constructor
private:
    MyClass() {}
}

模板 - 伏都教答案等是可以接受的。对我来说最重要的是这个类可以用不同的模板参数创建和返回自己的实例,但是外部代码不能调用它正在使用的特定构造函数。

2 个答案:

答案 0 :(得分:4)

MyClass

中添加以下内容
template<typename Q> friend class MyClass;

MyClass<int>MyClass<float>解析为完全不同的类。他们对彼此一无所知,他们无法访问彼此的私人任何超过2个完全独立的课程。因此,解决方案是每隔一个实例化MyClass朋友进行每次实例化,这样他们就可以看到彼此的私有,就像它们是同一个类一样。

答案 1 :(得分:1)

在这种情况下,

friend是您的朋友,因为每当您需要隐私限制例外时

class MyClass {
     template <class U> friend class MyClass;
     ....