持有泛型类型的实例 – C.

持有泛型类型的实例 – C.,第1张

概述我有一个tree_node类和一个树类. template<typename T>class tree_node{public: tree_node(const std::string& key_, const T& value_) : key(key_), value(value_) { }private: T value; std::st 我有一个tree_node类和一个树类.

template<typename T>class tree_node{public:   tree_node(const std::string& key_,const T& value_)         : key(key_),value(value_)   {   }private:   T value;   std::string key;};template<typename T>class tree{public:   tree() : root(new tree_node<T>("",???)) { }private:   tree_node<T>* root;};

tree_node在创建时需要T的实例.我怎么能把它传递给???地点?我可以说T(),但只有当T有一个无参数构造函数时它才会起作用.我不能为tree_node提供无参数构造函数,因为如果T没有无参数构造函数,它将无法编译.

我正在寻找一种方法来设计tree_node,它可以正确地保存所有类型,包括指针类型.

编辑

在尝试了各种方法后,我发现boost :: optional在这种情况下很有用.我可以将T值设为boost :: optional< T>值.这将解决空构造函数问题.所以我可以使用tree_node的另一个构造函数重载,它只需要一个键.这可以由根节点使用.这是正确的方法吗?

谢谢..

解决方法 Init根值应该为零.如果你推新节点,你显然知道价值.

template<typename T> class tree { public:    tree() : root(0) { }    voID push (const std::string& key,const T & t) {      if (root == 0) {        root = new tree_node<T>(key,t);      } else {         // Make complex tree      }   }private:    tree_node<T>* root; };

如果使用后缀树,则应该制作两种类型的顶点:

enum NodeType { EMPTY_NODE,VALUE_NODE };class base_tree_node { public:    base_tree_node() :parent(0),left(0),right(0) {}   virtual NodeType gettype() = 0;protected:    base_tree_node* parent;   base_tree_node* left;   base_tree_node* right;}; class empty_tree_node : base_tree_node{   virtual NodeType gettype()  { return EMPTY_NODE; }}template<typename T> class tree_node : base_tree_node { public:    tree_node(const std::string& key_,const T& value_)          : key(key_),value(value_)    {    }    virtual NodeType gettype()  { return VALUE_NODE; }private:    T value;    std::string key; };
总结

以上是内存溢出为你收集整理的持有泛型类型的实例 – C.全部内容,希望文章能够帮你解决持有泛型类型的实例 – C.所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1212735.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存