[英]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.