我想为二叉树创建类:
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树::的默认参数)()”是用类型的参数不相容“空隙()()”
当参数是一个函数时,我不知道如何为参数设置默认值。
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] 删除。
我来说两句