【发布时间】:2011-06-23 03:55:00
【问题描述】:
我不熟悉 C++0x。大约 6 个月前我自己才开始学习 C++,不过我掌握得相当好(对于初学者来说)。
我有一个模板类:
template <typename T>
class Node
{
...
}
然后,我有这个:
template <typename T>
class BinaryTree
{
protected:
typedef Node<T>* node_t;
...
}
在这里,二叉树类充当“基类”,可以通过二叉树的特化来扩展。 (AVL 树、红黑等,)节点 typedef 受到保护,因为其想法是专业化将能够使用它……他们可以使用它,但它看起来很糟糕。
例如,在我的 BiTree 类(我对最通用二叉树的创意名称,基本上是 BST)中,我们有这样的:
template <typename T>
class BiTree : public BinaryTree<T>
{
private:
typedef typename BinaryTree<T>::node_t node_t; // Yuck
...
}
更糟糕的是,我是喜欢在类之外指定函数的人之一,所以当我想说 node_t 是返回类型时......好吧,看看......
template <typename T>
typename BiTree<T>::node_t
BiTree<T>::insert(BiTree<T>::node_t& node, T data)
{
...
}
有没有办法只使用 node_t?这就是从基类继承 typedef 的重点。这就是 C++0x 中的 using 关键字的用途吗?我将如何将其应用于这种情况?谢谢。
编辑:我想知道它是否有用的原因是因为这个问题:C++ template typedef
【问题讨论】:
-
using不是 C++0x 中的新功能,那么您要使用什么语法?它确实被模板化的 typedef 回收了,但我不确定这是否适用于这里 [虽然我不记得它们是如何使用的,所以也许我弄错了]。 -
=( 我想知道它是否适用,因为人们在谈论模板类型定义并使用here
-
好吧,它可以用作模板 typedef(实际上是 C++0x 中的新用途),但它与您拥有的没有任何不同。它只对你想要保留一个或多个模板参数的 typedef 有帮助,但不是全部。
标签: c++ templates inheritance c++11 typedef