像上面这样,把链表的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也需要像普通类那样先实例化才能用