C++ 如何使用结构作为模板对联合进行编码,同时将该联合作为元素 我正在尝试构造一个并集来替换这对指针(左和右) 通过可作为数组访问的并集。 最初这是二进制搜索树(BST)的工作代码
我希望能够做到这一点:C++ 如何使用结构作为模板对联合进行编码,同时将该联合作为元素 我正在尝试构造一个并集来替换这对指针(左和右) 通过可作为数组访问的并集。 最初这是二进制搜索树(BST)的工作代码,c++,struct,binary-tree,unions,crtp,C++,Struct,Binary Tree,Unions,Crtp,我希望能够做到这一点: p = p->pLR.array[value>insertValue]; 除了旧的分支 if(value>insertValue) p = p->right; else p = p->left; 1b。这并不完全是为了避免代价高昂的分支预测失误, 但这仅仅是为了学会实现这样的目标 主要的问题是BinaryNode是在联合中模板化的,联合是BinaryNode的一个元素 以下是我正在编写的非编译代码: template <cl
p = p->pLR.array[value>insertValue];
除了旧的分支
if(value>insertValue) p = p->right;
else p = p->left;
1b。这并不完全是为了避免代价高昂的分支预测失误,
但这仅仅是为了学会实现这样的目标
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
3c。所以我又把它改成了
template <class dataType, class BinaryNode<dataType> >
template <class dataType, class BinaryNode<dataType> >
3d。现在,这与CRTP非常接近
(不必告诉我这不是真正的CRTP,但很奇怪)
模板
联合二进制节点{
结构{
二进制节点*左;
二进制节点*对;
};
BinaryNode*数组[2];
};
模板
结构二进制节点{
数据类型值;
双核节点间pLR;
};
[错误]“BinaryNode”不是模板
只有一个错误!哇!这一定是个赢家
3e。现在我真的强迫它进入CRTP模式。。。更糟
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
模板
联合二进制节点{
结构{
二进制节点*左;
二进制节点*对;
};
BinaryNode*数组[2];
};
模板
结构二进制节点{
数据类型值;
双核节点间pLR;
};
[错误]“BinaryNode”不是类模板
[错误]“class BinaryNode”不是模板非类型参数的有效类型
[错误]“BinaryNode”不是模板
它不一定是CRTP。
有办法吗
如何编写一个联合体,并指向具有该联合体元素的结构体?我真的不明白这个问题,但您可能忘记了
BinaryNode
的前向声明了吗
template <class dataType>
struct BinaryNode;
template <class dataType>
union BinaryNodePointerPair
{
struct
{
BinaryNode<dataType> *left;
BinaryNode<dataType> *right;
};
BinaryNode<dataType> *array[2];
};
template <class dataType>
struct BinaryNode
{
dataType value;
BinaryNodePointerPair<dataType> pLR;
};
模板
结构二进制节点;
模板
联合二进制节点
{
结构
{
二进制节点*左;
二进制节点*对;
};
BinaryNode*数组[2];
};
模板
结构二进制节点
{
数据类型值;
双核节点间pLR;
};
我真的不明白这个问题,但是您是否忘记了二进制节点的转发声明
template <class dataType>
struct BinaryNode;
template <class dataType>
union BinaryNodePointerPair
{
struct
{
BinaryNode<dataType> *left;
BinaryNode<dataType> *right;
};
BinaryNode<dataType> *array[2];
};
template <class dataType>
struct BinaryNode
{
dataType value;
BinaryNodePointerPair<dataType> pLR;
};
模板
结构二进制节点;
模板
联合二进制节点
{
结构
{
二进制节点*左;
二进制节点*对;
};
BinaryNode*数组[2];
};
模板
结构二进制节点
{
数据类型值;
双核节点间pLR;
};
对匆忙下台的选民:我能知道这个问题出了什么问题吗?我违反了“如何提出一个好问题”的哪条原则?我应该如何修改这个问题以使其更好?我投了反对票,因为我在这里做了一些被认为是好的编辑(减少聊天和元评论),而你在随后的编辑中重写了它们。(一般来说,我不建议问人们为什么投了反对票,因为你很少会得到答案——大多数人会投票,然后继续前进)。你是否真的观察到只有struct存在性能问题?早熟优化的优点。假定的性能问题是常量分支,而不是结构。我的目标是创建一个替代方案,然后进行比较。但是,是的,我还没有观察到任何真正的问题或瓶颈。对匆忙下台的选民:我能知道这个问题出了什么问题吗?我违反了“如何提出一个好问题”的哪条原则?我应该如何修改这个问题以使其更好?我投了反对票,因为我在这里做了一些被认为是好的编辑(减少聊天和元评论),而你在随后的编辑中重写了它们。(一般来说,我不建议问人们为什么投了反对票,因为你很少会得到答案——大多数人会投票,然后继续前进)。你是否真的观察到只有struct存在性能问题?早熟优化的优点。假定的性能问题是常量分支,而不是结构。我的目标是创建一个替代方案,然后进行比较。但是,是的,我还没有发现任何真正的问题或瓶颈。这确实有效!如果我不是那么狂喜的话,我会为自己感到羞愧的!我该如何把它标记为答案?这确实有效!如果我不是那么狂喜的话,我会为自己感到羞愧的!我如何将此标记为答案?
[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
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
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
template <class dataType>
struct BinaryNode;
template <class dataType>
union BinaryNodePointerPair
{
struct
{
BinaryNode<dataType> *left;
BinaryNode<dataType> *right;
};
BinaryNode<dataType> *array[2];
};
template <class dataType>
struct BinaryNode
{
dataType value;
BinaryNodePointerPair<dataType> pLR;
};