与模板类型 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);
}

我不知道这是否可能。没有注释掉有问题的部分,编译器会给出一个错误错误:C++ 要求所有声明都使用类型说明符

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)