c++,在类里定义其他类可以吗,做到B类只能被A类包含使用

图片说明

像上面这样,把链表的Node类型定义在list里,编译好像时没问题的,也能用。

这也做好吗,会不会有什么问题,百度好像没看到相关的例子这么做过。

opencv里有类似的使用方式:
举例来说:
ocl.hpp中的类定义:

class CV_EXPORTS_W_SIMPLE Device
{
.......
protected:
    struct Impl;
    Impl* p;
};

ocl.cpp的实现:

struct Device::Impl
{
    Impl(void* d)
    {...}
        ......
};

特点是头文件的class定义对象的访问接口, 而具体的实现在protect: struct Impl里完成,对分离对象的接口和实现效果比较好。

https://github.com/opencv/opencv/blob/master/modules/core/src/ocl.cpp

https://github.com/opencv/opencv/blob/master/modules/core/include/opencv2/core/ocl.hpp

这样做没问题
好处有两个,一个是封闭了Node,使得外部无法使用
一个是相当于Node是list的友元类,从而可以直接访问list的私有成员

缺点是
你不能在public方法里向外返回Node类型作为返回值。Node也需要像普通类那样先实例化才能用