我一直想知道以下内容是什么意思(从cppreference pimpl获取的代码段)
class widget::impl {
^^^^^^^^^^^^
...
};
a_class::another_class
是什么意思?这是名称空间吗?或者是一个内部类声明为主要类?
答案 0 :(得分:4)
或者是一个内部类声明为主类外的吗?
宾果。要非常清楚,iit实际上是封闭类之外的内部类定义。
如果您希望类具有类似成员的类访问作为实现细节,但又不希望将该嵌套类的定义发布到您的类的客户端,那么这是一个方便的技巧。< / p>
答案 1 :(得分:3)
::
运算符是scope resolution operator。它限定了表达式的范围。在您的情况下,它使用范围class impl
限定表达式widget
,表示属于impl
的类widget
。请考虑以下示例,该示例在不同的范围定义两个impl
类:
// global impl
class impl;
class widget
{
// widget's impl
class impl;
};
class widget::impl
{
// Define widget's impl
};
class impl
{
// Define global impl
};
范围解析运算符允许您清楚地声明要定义的类。
答案 2 :(得分:1)
这是一个内部阶级。
class Widget
{
// ...
private:
class impl;
};
// Then, typically in a separate implementation file:
class Widget::impl
{
public:
// ...
T1 t1_;
T2 t2_;
};
答案 3 :(得分:0)
可以是内部类别的前向声明的声明,例如:
class A{
class B;
};
class A::B {
};