例如:
template<class T>
class MyClass
{
public:
template<class U>
MyClass<U> doSomething() { return MyClass<U>(); } //can't access private constructor
private:
MyClass() {}
}
Template-voodoo 答案等是可以接受的。对我来说最重要的是,此类可以使用不同的模板参数创建和返回自身的实例,但外部代码不能调用它正在使用的特定构造函数。
最佳答案
在MyClass
中添加以下内容
template<typename Q> friend class MyClass;
MyClass<int>
和 MyClass<float>
解决完全不同的类。他们对彼此一无所知,而且他们不能访问彼此的隐私,最多只能访问 2 个完全独立的类。因此,解决方案是让 MyClass
的每个实例化。将所有其他实例化为好友,这样他们就可以看到彼此的私有(private)信息,就好像他们是同一个类一样。
关于c++ - 如何从不同的模板实例化调用模板的私有(private)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14842578/