我可以为联合的C ++函数设置默认参数吗

菲拉斯

如您在以下代码中看到的,我尝试将一些函数“ initialize”的默认参数设为并集。如何更改函数“ initialize”的定义以使其与C ++ 11之前的C ++兼容?我需要向RedBlackPointer添加一些构造函数吗?如果是这样,怎么办?

template <typename T> class RedBlackNode{
protected:
    union RedBlackPointer{
        RedBlackNode *node;
        struct{
            unsigned value:1;   // for color / other info
        }flag;
    }left, right, parent;

    T key;

public:
    void initialize(T key, RedBlackPointer left = {(RedBlackNode*)0},
            RedBlackPointer right = {(RedBlackNode*)0},
            RedBlackPointer parent = {(RedBlackNode*)0}){
        this->key = key;
        this->left = left; this->right = right;
        this->parent = parent;
    }
}
克里斯多夫

实际上,扩展的初始化列表在C ++ 11之前不可用。

只要记住在一个联盟中任何时候只有一个成员都可以处于活动状态,就可以使用默认构造函数轻松解决此问题:

template <typename T> class RedBlackNode{
protected:
    union RedBlackPointer{
        RedBlackPointer() : node(0) { }  // <==== default constructor
        RedBlackNode *node;
        struct{
            unsigned value:1;   // for color / other info
        }flag;
    }left, right, parent;
    T key;
public:
    void initialize(T key, RedBlackPointer left = RedBlackPointer(), //refer to default ctor
            RedBlackPointer right = RedBlackPointer(),
            RedBlackPointer parent = RedBlackPointer()){
        this->key = key;
        this->left = left; this->right = right;
        this->parent = parent;
    }
    void show() {
        cout<<left.node<<","<<right.node<<","<<parent.node<<","<<key<<endl;
    }
};   //  <=== ; 

这里是如何证明它有效的方法:

 RedBlackNode<int> N; 
 N.initialize(5); 
 N.show();

这里是现场演示,这里是拒绝初始代码的编译器

附加评论:

一件事使我感到困惑:在您的联合中,您将指针与一个位标志组合在一起。

这本身并不是在推sho:可以想象,这是避免指针分配开销的一种技巧,当有时Poited的值足够小以直接存储在树中时。

但是,在这种情况下,尚不清楚如何知道活动成员(即何时使用指针,何时使用标志)。

因此,我建议您交叉检查此处是否有错误/遗漏的元素。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可以为扩展参数包“填充”默认函数参数吗?

来自分类Dev

主函数可以具有默认参数值吗?

来自分类Dev

我可以为我的Python扩展模块(用C ++编写)使用备用构建系统吗?

来自分类Dev

我们真的可以将无参数构造函数称为默认构造函数吗?

来自分类Dev

参数包函数参数可以默认吗?

来自分类Dev

我可以为带参数的构造函数创建类工厂吗?

来自分类Dev

我可以为登台和释放资源以不同方式参数化AWS Lambda函数吗?

来自分类Dev

我可以为函数绑定“ this”以外的其他东西吗?

来自分类Dev

我可以在simulink中的matlab函数中将参数设置为可调参数吗?

来自分类Dev

CakePHP 3-可以为表格设置默认条件吗?

来自分类Dev

我可以为此使用Pivot吗?

来自分类Dev

我可以为Maven中的任何项目设置默认部署吗?

来自分类Dev

我可以为firewalld安装GUI吗?

来自分类Dev

C ++为函数参数设置默认参数吗?

来自分类Dev

是否可以为pytest的参数全局设置默认的“ ids”功能?

来自分类Dev

我可以为函数的返回类型加上别名吗

来自分类Dev

我可以为tmux窗口设置默认标题吗?

来自分类Dev

我可以为tr禁用缓冲吗

来自分类Dev

我们真的可以将无参数构造函数称为默认构造函数吗?

来自分类Dev

可以在调用函数参数之前对其进行设置吗?

来自分类Dev

我可以为Maven中的任何项目设置默认部署吗?

来自分类Dev

我可以为Expect()设置基本网址吗?

来自分类Dev

我可以为确定的表设置条件吗?

来自分类Dev

我可以为模板类的模板类型添加参数吗

来自分类Dev

属性路由 - 我可以为不在路由中的参数指定默认值吗

来自分类Dev

我可以为 pg-promise 中的连接设置 search_path(或默认模式)吗?

来自分类Dev

doctest 可以解析带有默认参数的函数吗?

来自分类Dev

您可以使用一等函数将变量设置为等于具有默认参数的函数吗?

来自分类Dev

我们可以为函数赋值吗?

Related 相关文章

  1. 1

    可以为扩展参数包“填充”默认函数参数吗?

  2. 2

    主函数可以具有默认参数值吗?

  3. 3

    我可以为我的Python扩展模块(用C ++编写)使用备用构建系统吗?

  4. 4

    我们真的可以将无参数构造函数称为默认构造函数吗?

  5. 5

    参数包函数参数可以默认吗?

  6. 6

    我可以为带参数的构造函数创建类工厂吗?

  7. 7

    我可以为登台和释放资源以不同方式参数化AWS Lambda函数吗?

  8. 8

    我可以为函数绑定“ this”以外的其他东西吗?

  9. 9

    我可以在simulink中的matlab函数中将参数设置为可调参数吗?

  10. 10

    CakePHP 3-可以为表格设置默认条件吗?

  11. 11

    我可以为此使用Pivot吗?

  12. 12

    我可以为Maven中的任何项目设置默认部署吗?

  13. 13

    我可以为firewalld安装GUI吗?

  14. 14

    C ++为函数参数设置默认参数吗?

  15. 15

    是否可以为pytest的参数全局设置默认的“ ids”功能?

  16. 16

    我可以为函数的返回类型加上别名吗

  17. 17

    我可以为tmux窗口设置默认标题吗?

  18. 18

    我可以为tr禁用缓冲吗

  19. 19

    我们真的可以将无参数构造函数称为默认构造函数吗?

  20. 20

    可以在调用函数参数之前对其进行设置吗?

  21. 21

    我可以为Maven中的任何项目设置默认部署吗?

  22. 22

    我可以为Expect()设置基本网址吗?

  23. 23

    我可以为确定的表设置条件吗?

  24. 24

    我可以为模板类的模板类型添加参数吗

  25. 25

    属性路由 - 我可以为不在路由中的参数指定默认值吗

  26. 26

    我可以为 pg-promise 中的连接设置 search_path(或默认模式)吗?

  27. 27

    doctest 可以解析带有默认参数的函数吗?

  28. 28

    您可以使用一等函数将变量设置为等于具有默认参数的函数吗?

  29. 29

    我们可以为函数赋值吗?

热门标签

归档