4

这是我的班级精选

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

完整代码在这里: http: //pastebin.com/TJmAgwdu

4

1 回答 1

3

您的函数Insert是一个成员函数,这意味着它接受一个隐式this指针。std::bind()如果你想得到一个一元仿函数,你必须使用Insert()

if (this != &tree) {
    tree.VisitInOrder(
        std::bind(&BinarySearchTree::Insert, this, std::placeholders::_1));
}

这是一个实时示例,显示了当存在以下分配时程序编译:

obj3 = obj1;
于 2013-06-03T22:04:25.887 回答