gpt4 book ai didi

c++ - 在 C++ 中将 main() 声明为友元函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:21 25 4
gpt4 key购买 nike

我有一个类,我只希望客户为每个进程创建一个对象。除了单例,更好的方法(我相信)是告诉客户只在 main() 中创建它们。因此,一种自然的强制措施是将构造函数设为私有(private)并将 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 类放在命名空间中。

最佳答案

你需要在类定义之前在全局命名空间中声明main,因为friend声明只能引入周围命名空间中的名称:

int main(int, char**);

并在命名空间内引用它时限定名称:

namepace ns { class A { friend int ::main(int, char**); A() {} }; }
// ^^

关于c++ - 在 C++ 中将 main() 声明为友元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14582603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com