[英]How can I use different struct as template argument in a template function?
[英]A template struct as a function argument
我有我的結構字典
template<typename T, typename U>
struct Diccionary {
friend void insert<T, U>(Diccionario<T,U>& d, const T& c, const U& v);
friend void insertAux<T, U>(typename Diccionary<T,U>::Nodo* a, const T& c, const U& v);
private:
struct Nodo{
T t;
U u;
Nodo* left;
Nodo* right;
};
Nodo* root;
Nodo* iterator;
int size;
};
我的insertAux參數有錯誤,我不知道如何為該函數提供指向Node的指針。 問題是Node在結構中,所以編譯器告訴我:
錯誤:“ struct Diccionario”中沒有名為“ Nodo”的類型
我需要為該函數提供一個Node,因為隨后我將使用遞歸算法,並且由於樹和字典不同,因此無法為該字典提供Dictionary類型。
錯誤消息會告訴您,這是什么問題。 在使用它的地方,尚未定義Diccionary<T,U>::Nodo
。
解決方案1:先定義一下。
template<typename T, typename U>
struct Diccionary {
private:
struct Nodo{
T t;
U u;
Nodo* left;
Nodo* right;
};
public:
friend void insert<T, U>(Diccionario<T,U>& d, const T& c, const U& v);
friend void insertAux<T, U>(typename Diccionary<T,U>::Nodo* a, const T& c, const U& v);
private:
Nodo* root;
Nodo* iterator;
int size;
};
解決方案2:由於您將其用作指針,因此足以在之前進行聲明。
template<typename T, typename U>
struct Diccionary {
private:
struct Nodo;
public:
friend void insert<T, U>(Diccionario<T,U>& d, const T& c, const U& v);
friend void insertAux<T, U>(typename Diccionary<T,U>::Nodo* a, const T& c, const U& v);
private:
struct Nodo{
T t;
U u;
Nodo* left;
Nodo* right;
};
Nodo* root;
Nodo* iterator;
int size;
};
一般說明:盡可能少使用friend
。 我還沒有編寫一個C ++程序,在我的代碼中的任何地方都需要friend
,而且我已經寫了很多。 我認為這是一種代碼氣味。
而且看起來您正在嘗試實現自己的樹結構。 請考慮使用標准庫容器。 您可能不會變得更好,如果做得更好,您會提出其他問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.