这是我班级的选择
template <typename TValue, typename TPred = std::less<TValue> >
class BinarySearchTree {
public:
BinarySearchTree<TValue, TPred> &operator=(BinarySearchTree<TValue, TPred> const &tree) {
if (this != &tree) {
tree.VisitInOrder(Insert);
}
return *this;
}
bool Insert(TValue const &value) {
return m_Insert(value, pRoot);
}
template <typename TVisitor> void VisitInOrder(TVisitor visitor) const;
...
};
并且以下序列不起作用:VisitInOrder(Insert)
因为我的编译器说缺少参数
但我的主要看起来像这样,我可以使用没有参数的函数:
void Print(int const x) { cout << x << endl; }
int main() {
BinarySearchTree<int> obj1, obj2, obj3;
obj1.Insert(10);
obj1.VisitInOrder(Print);
return 0;
}
答案 0 :(得分:3)
您的函数Insert
是一个成员函数,这意味着它接受一个隐式的this
指针。如果你想从std::bind()
中获得一元仿函数,你必须使用Insert()
:
if (this != &tree) {
tree.VisitInOrder(
std::bind(&BinarySearchTree::Insert, this, std::placeholders::_1));
}
这是一个live example,显示程序编译时存在以下赋值:
obj3 = obj1;