Im再次陷入模板。C++模板遞歸 - 如何解決?
說,我想實現一個guicell系統。每個guicell可以包含一些孩子guicells。到目前爲止,樹形結構如此。在std-C++中我會去stgg。像:
template <typename T>
class tree
{
public:
void add (T *o) { _m_children.push_back (o); }
void remove (T *o) { ... };
list<T*> _m_children;
};
class _cell : public tree<_cell>
{
public:
_cell() { x = 0; y =0; }
long x,y;
};
但現在我想進一步,並使細胞引用如果編碼器希望如此。所以我基本上實現了一個refTree - 類,也只需要指針(_cell *)作爲輸入。
template <typename T>
class refTree
{
public:
void add (T *o) { _ref<T> r = o; _m_children.push_back (r); }
void remove (T *o) { ... }
list<_ref<T> > _m_children;
};
此外,這仍然工作正常。使用
class _cell : public refTree<_cell>
{
:
};
到用戶代碼中沒有變化,但所有補充_cell *它們添加到樹前,現在引用。
好,但現在我想能夠在_cell級別上選擇使用哪種樹模板實現。所以這意味着我必須使_cell - 類成爲一個模板類,它將模板類作爲參數(所選樹模板)。
template <template <typename> class __TyTree = tree>
class Cell : public __TyTree <Cell> // cannot work - no question, Cell expects input
{
};
在這裏,我們得到了遞歸問題 - ofcourse編譯器不能夠解決,因爲小區正在等待一棵樹 - 這是期待一個簡單類型的參數(這應該是一個細胞OFC參數正在等待一個樹 - 參數期望一個簡單的....)。
你得到的圖片 - 什麼是這種問題的適當解決方案?
請檢查。我認爲一切都很好。 – 2009-10-27 14:22:33
Aaah是的,你是對的,它現在編譯好了。與雙重下劃線的預感相吻合 - 會避免這種情況。有一件事仍令我感到困惑 - 默認參數在這裏不被接受 - 似乎我必須宣佈Cell mycell;我不能只聲明Cell mycell; - 有任何想法嗎 ? –
2009-10-27 14:36:01
如果你想省略默認參數,你應該寫'Cell <>'。因爲'Cell'是模板類。 – 2009-10-27 14:39:13