我正在将代码从Java移植到c++,我想复制一些匿名功能。
在A.h文件中,我有:
class A
{
private:
int a;
class AnonClass;
friend class AnonClass;
};
在文件A.cpp中,我有:
namespace
{
class AnonClass
{
public:
AnonClass(A* parent)
{
parent->a = 0; // This doesn't work, a is not accessible
}
}
}
在C++中可以加匿名命名空间中的类为好友吗?
在Java中,您可以声明匿名类,因此它将非常类似。此外,它不会将AnonClass暴露给A.h的客户端
发布于 2013-11-09 16:21:28
不太为人所知的另一种方法是使类Anon成为A的成员类。在A类中,您只需要一行class Anon;
--没有真正的代码,没有友元声明。注意,它放在A类中,几乎和Java中的一样。在.cpp文件中,您可以编写有关Anon的所有详细信息,但不是放在匿名名称空间中,而是放在A::
中
class A::Anon { ..... };
你可以像往常一样拆分A::Anon的声明和实现,只需记住始终将A::添加到Anon。
类Anon是A的成员,因此可以访问A的所有其他成员。然而,A的客户端仍然不知道它,并且不会扰乱全局名称空间。
https://stackoverflow.com/questions/19872920
复制相似问题