Use function pointer in template class

This is my class

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

and the following sequence does not work: VisitInOrder(Insert) , because my compiler says that there are no arguments

but my main one looks like this and there I can use the function without its arguments:

 void Print(int const x) { cout << x << endl; } int main() { BinarySearchTree<int> obj1, obj2, obj3; obj1.Insert(10); obj1.VisitInOrder(Print); return 0; } 

full code here: http://pastebin.com/TJmAgwdu

+4
source share
1 answer

Your Insert function is a member function, which means that it takes an implicit this pointer. You should use std::bind() if you want to get a unary functor from Insert() :

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

Here is a live example showing compiling a program when the following assignment is present:

 obj3 = obj1; 
+3
source

Source: https://habr.com/ru/post/1484299/


All Articles