Hi,
I want to encapsulate boost::find in a template
method in a base class for easier use.
Here is some code:
#include <boost/function.hpp>
#include
<boost/bind.hpp>
class CWindow {
public:
CWindow()
{
SetEventHandler(&CWindow::OnCreate); // this call
works
}
long OnCreate() {
return
0;
}
template<typename T> void SetEventHandler(long
(T::*Function)()) {
boost::function<long> EventFunction =
boost::bind(Function, this);
// ...
// Add
EventFunction into a std::map
}
};
class CButton : public CWindow
{
public:
CButton()
{
SetEventHandler(&CButton::OnPaint); // this call doesn't
compile
}
long OnPaint() {
return
0;
}
};
int main() {
return 0;
}
The SetEventHandler call in the CButton's
constructor generates 2 errors on VC++ 7.0:
mem_fn_template.hpp(37): error C2440: 'newline' :
'CWindow *' can't be converted in 'CButton *'
mem_fn_template.hpp(37): error
C2647: '->*' : 'const boost::_mfi::mf0<R,T>::F' can't be dereferenced
in '$T'
It also doesn't compile on g++ 3.2.
If I copy & paste the template method in every
derived class the code compiles well, but this can't be a good soluation.
:(
And if i outcomment "boost::function<long> EventFunction" it also
works, but of course I need to work with boost::bind's return value.
;-)
Is there a way to solve this problem?
cu,
Matthias