Re: [Boost-users] [boost::bind] How use with fn objects?
-----Original Message----- From: boost-users-bounces@lists.boost.org [mailto:boost-users- bounces@lists.boost.org] On Behalf Of Rene Rivera Sent: Monday, August 29, 2005 12:30 PM To: boost-users@lists.boost.org Subject: Re: [Boost-users] [boost::bind] How use with fn objects?
BRIDGES Dick wrote: [snip]
I'm trying to pass a function object that takes no parameters to a boost::thread constructor and cannot get it right. [snip]
Either:
int main( int argc, char **argv ) { Foo f; boost::thread doit( boost:bind(Foo::operator(),&f)() ); doit.join(); return 0; }
Or:
int main( int argc, char **argv ) { Foo f; boost::thread doit( f ); doit.join(); return 0; }
Should work.
-- -- Grafik - Don't Assume Anything -- Redshift Software, Inc. - http://redshift-software.com -- rrivera/acm.org - grafik/redshift-software.com -- 102708583/icq - grafikrobot/aim - Grafik/jabber.org
After I figured out I had to use boost::ref(f) with my real
class, the second form worked fine. I had a problem with the
first form though.
<code>
boost::thread doit( boost::bind(Foo::operator(),&f)() );
</code>
Yielded the following [edited to fit] result:
<result>
g++ -D_REENTRANT -I/usr/local -I/usr/local/boost_1_33_0
-I/usr/local/include
-O0 -g3 -Wall -c -fmessage-length=0 -Wno-non-virtual-dtor -omain.o
../main.cpp
../main.cpp: In function `int main(int, char**)':
../main.cpp:22: error: invalid use of non-static member function
`void my_namespace::Foo::operator()()'
/usr/local/boost_1_33_0/boost/bind.hpp: At global scope:
/usr/local/boost_1_33_0/boost/bind.hpp: In instantiation of
`boost::_bi::result_traits
"BRIDGES Dick"
After I figured out I had to use boost::ref(f) with my real class, the second form worked fine. I had a problem with the first form though. <code> boost::thread doit( boost::bind(Foo::operator(),&f)() ); </code> Yielded the following [edited to fit] result: <result> g++ -D_REENTRANT -I/usr/local -I/usr/local/boost_1_33_0 -I/usr/local/include -O0 -g3 -Wall -c -fmessage-length=0 -Wno-non-virtual-dtor -omain.o ../main.cpp ../main.cpp: In function `int main(int, char**)': ../main.cpp:22: error: invalid use of non-static member function `void my_namespace::Foo::operator()()' [snipped a lot] Regards, Dick Bridges
You need to write &Foo::operator() [note the address-of operator], to mean a member function pointer, while Foo::operator() means trying to call operator() as if it were a static method of the Foo class. HTH Pablo
participants (2)
-
BRIDGES Dick
-
Pablo Aguilar