Я не знаком с C ++ 0x. Я только начал изучать C ++ около 6 месяцев назад, хотя у меня достаточно сильные познания (для начинающих).
У меня есть шаблонный класс:
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 от базового класса. Для этого ли ключевое слово using
в C ++ 0x? Как бы я применил это к этой ситуации? Благодаря.
РЕДАКТИРОВАТЬ: причина, по которой мне интересно, если это полезно, из-за этого вопроса: шаблон C ++ typedef