- Je suis en train de construire une union qui remplacera la paire de pointeurs (gauche & droite) par un syndicat qui est accessible un tableau. A l'origine c'est le code de travail pour une recherche binaire Arbre (BST)
Je veux être en mesure de le faire:Comment coder une union en utilisant un struct comme modèle, tout en ayant cette union comme un élément
p = p->pLR.array[value>insertValue];
en plus de l'ancien ramifié
if(value>insertValue) p = p->right;
else p = p->left;
1b . Ce n'est pas exactement pour éviter une erreur de branchement coûteux, mais simplement pour pouvoir apprendre pour implémenter [quelque chose] comme ceci.
- Principalement le problème que BinaryNode est modélisé dans l'union, et l'union est un élément du BinaryNode!
Voici mon code en cours non-compilation:
template <class dataType, class BinaryNode<dataType> >
union BinaryNodePointerPair {
struct {
BinaryNode<dataType> *left;
BinaryNode<dataType> *right;
};
BinaryNode<dataType> *array[2];
};
template <class dataType>
struct BinaryNode {
dataType value;
BinaryNodePointerPair<dataType,BinaryNode<dataType> > pLR;
};
[Error] 'BinaryNode' is not a template
refondus de:
template <class dataType>
struct BinaryNode {
dataType value;
BinaryNode *left;
BinaryNode *right;
};
- Ce que j'ai essayé jusqu'à présent :
3a. Selon 'X is not a template' error le modèle doit être
template <class dataType, class <dataType>BinaryNode >
[Error] expected identifier before '<' token
[Error] expected '>' before '<' token
[Error] type/value mismatch at argument 2 in template parameter list for 'template<class dataType, int <anonymous> > union BinaryNodePointerPair'
3b. Donc, je le change en
template <class dataType, class BinaryNode<dataType> >
Mais cela donne les erreurs, plus l'original.
[Error] 'BinaryNode' is not a class template
[Error] 'class BinaryNode' is not a valid type for a template non-type parameter
[Error] 'BinaryNode' is not a template
3c. Donc, je change de nouveau à
template <class dataType, class BinaryNode<dataType> >
mais cela donne encore plus d'erreurs
[Error] 'BinaryNode' is not a class template
[Error] 'class BinaryNode' is not a valid type for a template non-type parameter
[Error] 'BinaryNode' is not a template
[Error] 'BinaryNode' is not a template type
3d. Maintenant, cela est étrangement proche de CRTP (pas besoin de me dire ce isnt vrai CRTP, mais il est curieusement)
template <class dataType>
union BinaryNodePointerPair {
struct {
BinaryNode<dataType> *left;
BinaryNode<dataType> *right;
};
BinaryNode<dataType> *array[2];
};
template <class dataType, BinaryNodePointerPair<dataType> >
struct BinaryNode {
dataType value;
BinaryNodePointerPair<dataType> pLR;
};
[Error] 'BinaryNode' is not a template
Seulement 1 erreur! HOU LA LA! Cela doit être un gagnant!
3e. Maintenant, je le force vraiment dans le CRTP ... c'est encore pire.
template <class dataType, class BinaryNode<dataType> >
union BinaryNodePointerPair {
struct {
BinaryNode<dataType> *left;
BinaryNode<dataType> *right;
};
BinaryNode<dataType> *array[2];
};
template <class dataType>
struct BinaryNode {
dataType value;
BinaryNodePointerPair<dataType, BinaryNode<dataType>> pLR;
};
[Error] 'BinaryNode' is not a class template
[Error] 'class BinaryNode' is not a valid type for a template non-type parameter
[Error] 'BinaryNode' is not a template
Il ne doit pas nécessairement être CRTP. Y a-t-il un moyen de le faire? Comment écrire une union w/pointeurs à une structure ayant un élément de cette union?
à la ruée downvoter: pourrais-je savoir quel est le problème avec la question? Quel principe de "comment poser une bonne question" ai-je violé? Comment devrais-je modifier la question pour l'améliorer? – Karl
J'ai downvoted, puisque j'ai fait quelques modifications qui sont considérées comme bonnes ici (réduction du chat et des méta-commentaires) et vous les avez écrasées lors d'une édition ultérieure. (En général, je ne recommande pas de demander pourquoi les gens ont été rabaissés, car vous obtiendrez rarement une réponse - la plupart des gens voteront et passeront à autre chose). – halfer
Avez-vous réellement observé un problème de performance avec seulement la structure? http://softwareengineering.stackexchange.com/questions/75390/why-should-i-care-about-micro-performance-and-efficency – Caleth