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 |
- Re: [boost] Encapsulate boost::bind in a template met... Matthias Hoffrichter
- Re: [boost] Encapsulate boost::bind in a templat... Sam Partington
- Re: [boost] Encapsulate boost::bind in a tem... Matthias Hoffrichter
- Re: [boost] Encapsulate boost::bind in a templat... Peter Dimov
- Re: [boost] Encapsulate boost::bind in a tem... Douglas Gregor
- Re: [boost] Encapsulate boost::bind in a tem... Matthias Hoffrichter