c++ - 如何从不同的模板实例化调用模板的私有(private)构造函数

标签 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() {}
}

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/

相关文章:

c++ - gdb 控件跳转到随机位置

c++ - 我应该总是在头文件中定义我的整个模板类吗?

C++ 这个类型应该满足 std::is_copy_assignable 吗?

c++ - 如何从 std::async 任务返回 std::tuple

C++ 11 : is a defaulted copy constructor user declared?

c++ - Google 测试自动注册是否避免静态初始化顺序失败?

c++ - 为什么这个 "rule of three"失败实际上失败了?

c# - 如何阻止应用程序打开

c++ - 温度转换程序c++

python - 在 django 中启用应用程序模板的覆盖?