用作具有默认值的参数

Mikhail_Sam

我想为二叉树创建类:

struct TreeNode {
    explicit TreeNode(int _value) : value(_value) {}

    int value = 0;
    TreeNode* left = nullptr;
    TreeNode* right = nullptr;
};

class BTree {
    public:
        void Add(int value);
        void PrintPostOrder(void (*func)() = print_current);
        ~BTree();

    private:
        TreeNode* root = nullptr;    
        void print_current();
        void delete_node();
};

BTree::~BTree() {
    PrintPostOrder(delete_node);
}

我的想法-对于析构函数和打印,我需要进行二叉树遍历。因此,我想创建函数Traversal并将其function用作参数:如果需要打印func = print和使用destructor func = delete_node

错误在这里:

void PrintPostOrder(void (*func)() = print_current);

类型“空隙(B树::的默认参数)()”是用类型的参数不相容“空隙()()”

当参数是一个函数时,我不知道如何为参数设置默认值。

v

print_current并且delete_node是成员函数,因此您需要一个成员函数指针:

class BTree {
public:
    void PostOrder(void (BTree::*fn)() = &BTree::print_current) {
        std::invoke(fn, this);
    }

    ~BTree() {
        PostOrder(&BTree::delete_node);
    }

private:
    void print_current();
    void delete_node();
};

为了获得更大的灵活性,您可以制作PostOrder一个模板:

struct TreeNode {};

class BTree {
public:
    template<class Fn>
    void PostOrder(Fn fn) { 
        std::invoke(fn);
    }

    void PostOrder() {
        PostOrder([this] { print_current(); });
    }

    ~BTree() {
        TreeNode* node;
        PostOrder([this, node] { delete_node(node); });
    }

private:
    void print_current();
    void delete_node(TreeNode*);
};

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有默认值的默认模板参数?

Spring Data Rest-具有默认值的参数

为具有默认值的参数键入注释

具有可发现的参数默认值的Powershell脚本?

具有方法指针参数默认值的模板

QMetaMethod :: invoke()具有参数默认值

使无参数类型具有“默认值”

获取具有默认值的函数参数

模板模板参数用作其他参数的默认值

JavaScript 中具有默认值的参数在非默认参数之前

如何在R函数中具有不同数量的具有默认值的参数?

具有默认值和默认属性的对象参数接口

具有默认值的单参数构造函数与默认构造函数相同吗?

从修改默认值的函数调用具有不同默认参数的多个函数

如何不在数据绑定中将参数传递给具有默认值的参数

为什么重新分配参数不适用于具有默认值的参数?

可以在具有默认值(作为可选参数)的参数中分配 const 变量吗?

具有默认值的Javascript对象

具有可变默认值的功能

具有默认值的python模板

具有默认值的模板功能

Protobuf:具有默认值的枚举

具有默认值的选项

创建具有默认值的表

具有默认值的快速协议

如何为Maven插件配置具有多个值的参数的默认值

Python argparse-如果没有给出参数,则互斥组具有默认值

如何使某些函数参数为无默认值的可选参数,而另一些具有默认值的可选参数?

给定一组字符串,创建词典字典,将其用作具有默认值的条目的键