首页 > 解决方案 > 与模板类型 T 的一个构造函数成为朋友的语法

问题描述

在 C++ 中可以与构造函数成为朋友:

class A {
    A() { B b; }
    class B {
        B(){};
        friend A::A();
    };
};

我怎样才能实现相同但使用模板类:

template< typename T >
class EnforceOnlyOneIntConstructor
{
    EnforceOnlyOneIntConstructor() {}
    //friend T::T(int);
    //friend T::OnlyOneIntConstructor(int);
    friend void T::regularFun(int);
};

class OnlyOneIntConstructor
{
    //EnforceOnlyOneIntConstructor< OnlyOneIntConstructor > m_trick;
public:
    OnlyOneIntConstructor(int) //: m_trick{}
    {}

    void regularFun(int) {
        EnforceOnlyOneIntConstructor< OnlyOneIntConstructor > m_trick;
    }

};

int main() {
    OnlyOneIntConstructor a(10);
}

我不知道这是否可能。如果不注释掉有问题的部分,编译器会给出错误:error: C++ requires a type specifier for all declarations

标签: c++c++11templatesc++14

解决方案


推荐阅读