Как написать список инициализации члена с объектом из другой структуры

Если у меня есть заголовочный файл бинарного дерева поиска BST.h и внутри я имею:

template <class type>
struct bstNode
{
type info;
bstNode * lLink;
bstNode * rLink;
};

И тогда у меня есть AVL.h заголовочный файл, и я хочу использовать bstNode структура в моем AVL.h файл как это:

template<class type>
struct avlNode
{
bstNode<type> bstN;
int height;

avlNode(const type & data, bstNode<type> *ll, bstNode<type> *rl, int h = 0)
:    //how would the initialization go here?
};

Мой вопрос, как бы я инициализировать avlNode конструктор с синтаксисом списка инициализатора? Я не уверен, как получить доступ к членам в bstN,

Я могу сделать это с традиционным определением вне структуры:

template<class type>
avlNode<type>::avlNode(const type & data, bstNode<type> *ll, bstNode<type> * rl, int h)
{
bstN->info = data;
bstN->lLink = ll;
bstN->rLink = rl;
height = h;
}

Но я хотел бы узнать синтаксис для списка инициализации члена, когда дело доходит до использования объекта (bstN) из другого класса / структуры.

0

Решение

bstNode в настоящее время является совокупным, так что вы можете сделать напрямую

template<class type>
avlNode<type>::avlNode(const type& data, bstNode<type>* ll, bstNode<type> * rl, int h) :
bstN{data, ll, rl}, height{h}
{
}

обеспечение bstNode Конструктор также может быть опцией.

2

Другие решения

Вы не можете получить доступ к членам непосредственно в списке инициализации. Вот почему вы должны создать конструктор, который принимает столько аргументов, сколько вам нужно, и передавать ему значения в списке инициализации.

Например,

template <class type>
struct bstNode
{
type info;
bstNode * lLink;
bstNode * rLink;

bstNode( const type &data, bstNode *left, bstNode *right ) :
info( data ), bstNode( left ), bstNode( right )
{
}
};

Затем вызовите этот конструктор в вашем avlNode.

template<class type>
avlNode<type>::avlNode(const type & data, bstNode<type> *ll, bstNode<type> * rl, int h) :
bstN( data, ll, rl ), height( h )
{
}
3

Вы можете определить функцию построения в bstNode

 template <class type>
struct bstNode
{
type info;
bstNode * lLink;
bstNode * rLink;
bstNode(const type & data = type(), bstNode<type> *ll =0, bstNode<type> *rl =0):info(data),llike(ll),rlick(rl){}
};
template<class type>
struct avlNode
{
bstNode<type> bstN;
int height;

avlNode(const type & data, bstNode<type> *ll, bstNode<type> *rl, int h = 0)
:    bstN(data,l1,rl),height(h)
};
0
По вопросам рекламы [email protected]