我有一个类,我只希望客户为每个进程创建一个对象。除了单例,更好的方法(我相信)是告诉客户只在 main() 中创建它们。因此,一个自然的强制措施是将构造函数设为私有,并将 main() 设为友元。
它是这样工作的:
class A { friend int main(int, char**); A() {} };
int main(int, char **) { A a; }
但是当我需要将类 A 放在命名空间中时它会中断:
namepace ns { class A { friend int main(int, char**); A() {} }; }
int main(int, char **) { ns::A a; }
问题在于范围:编译器现在认为
friend int main
表示命名空间 ns 中名为 main() 的函数。所以真正的 main() 变得无关紧要。
所以问题是:如何解决这个问题?当然,我必须将 A 类放在命名空间中。