//Container为一个模板类
template <typename T>
class Container {
protected:
std::shared_ptr<T> ref;
public:
Container() : ref(std::make_shared<T>()) {}
Container(const T& t) : ref(std::make_shared<T>(t)) {}
}
//TokenMap继承自Container,模板参数为MapData_t
struct TokenMap : public Container<MapData_t>, public Iterable {
TokenMap(const TokenMap& other) : Container(other) {
this->type = MAP;
}
}
//MapData_t的定义
struct MapData_t {
TokenMap_t map;
TokenMap* parent;
MapData_t();
MapData_t(TokenMap* p);
MapData_t(const MapData_t& other);
~MapData_t();
MapData_t& operator=(const MapData_t& other);
};
MapData_t 有一个构造函数MapData_t(TokenMap* p);通过这个构造函数会把TokenMap类型隐式转换为MapData_t 类型,从而通过编译