模板和访问权限

Templates and access

本文关键字:访问权 权限 访问      更新时间:2023-10-16

我已经阅读了大量有关如何有效使用模板的指南,但是似乎没有一个回答这个问题。它们似乎都访问了类中的节点,仅此而已。

例如,我有一个双向链表。该列表包含一个节点:

template<class T>
struct TNode
{
    T Data;
    TNode* pNext;
    TNode* pPrev;
};

现在我正在尝试使数据可从任何地方访问,例如:

TNode* pNode = m_VertexList.GetFirstElement();
然而,我

尝试过的每一种方式,我最终都不得不以某种方式投射它:

TNode<CObject*>* pNode = m_VertexList.GetFirstElement<CObject*>();
//I can't remember at this point if this is the exact syntax, but you get the idea

现在,虽然这不是一个很大的问题,但它并不理想。

有没有办法让它使第一行正确返回类型而无需指定它?

这是我得到的错误:

1>...error C2955: 'TNode' : use of class template requires template argument list

在 pastebin 中是整个节点结构和 dllist 类:http://pastebin.com/awkq9rcq

任何帮助将不胜感激:)

你需要类似auto node = m_VertexList.GetFirstElement();的东西m_VertexList,因为它应该是一个类模板。但是,您可以将节点的typedef添加到列表类中,也可以使用它:

template <typename T>
struct List
{
  typedef Node<T> node_type;
  typedef Node<T>* node_ptr_type;
  node_ptr_type GetFirstElement() { return first_; }
  node_ptr_type first_;
  ....
};

然后

typedef List<Cobject> CObjectList
CObjectList l;
auto n0 = l.GetFirstElement();
CObjectList::node_ptr_type n1= l.GetFirstElement();

完成本练习后,您可能需要查看std::list以获取实现良好的双向链表类模板的示例。