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。这并不完全是为了避免代价高昂的分支预测失误, 但这仅仅是为了学会实现这样的目标

  • 主要的问题是BinaryNode是在联合中模板化的,联合是BinaryNode的一个元素 以下是我正在编写的非编译代码:

    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;
    };