我不熟悉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得到了回收,但我不確定這是否適用於此[雖然我不記得它們是如何被使用的,所以也許我錯了]。 –
=(我想知道它是否適用,因爲人們在談論模板typedefs並使用[here](http://stackoverflow.com/questions/2795023/c-template-typedef) – LainIwakura
那麼,它可以用作模板typedef(實際上這是C++ 0x中的新用法),但它不會與你所擁有的任何不同,它只有幫助你想保留一個或多個模板參數但不是全部的typedef。 – Xeo