Boost:Function bind to overloaded member

The following code does not compile: struct X { int foo(int i) { return ++i; } template<class T> void foo( T& t ); }; int main() { boost::function<int(int)> f; X x; f = boost::bind( &X::foo, &x ); std::cout << f(5) << std::endl; } I get the error message "no matching function for call to ‘bind(<unknown type>, X*)" If I remove the "template<class T> void foo" method then it compiles fine. Is there a way to tell boost::bind to choose the int foo(int i) method rather than the "template<class T> void foo" method? James

Correction: int main() { boost::function<int(int)> f; X x; f = std::bind1st( std::mem_fun(&X::foo), &x); std::cout << f(5) << std::endl; }

AMDG James Sutherland wrote:
This gives an error: invalid static_cast from type ‘<unknown type>’ to type ‘int (X::*)(int)’ Any other ideas?
What compiler are you using? The following compiles for me with msvc 9.0, gcc 3.4.4 and gcc 4.3.0 #include <boost/function.hpp> #include <boost/bind.hpp> #include <functional> #include <iostream> struct X { int foo(int i) { return ++i; } template<class T> void foo( T& t ); }; int main() { boost::function<int(int)> f; X x; f = boost::bind(static_cast<int(X::*)(int)>(&X::foo), &x, _1); std::cout << f(5) << std::endl; } In Christ, Steven Watanabe

Hi, I do not know the status of boost on this matter, but for other implementions you might want to have a look at a NIST report on "Numerical Evaluation of Special Functions" at http://math.nist.gov/mcsd/Reports/2001/nesf/paper.html --> Mika Heiskanen
I am in need of computing Bessel functions of complex arguments. These are not implemented yet in the Boost library, correct? I try sending std::complex arguments to cyl_bessel or sph_bessel and they give me errors.

Thanks Mika, I appreciate the response. This link does look interesting. Alessandro On Mon, Jul 7, 2008 at 6:38 PM, Mika Heiskanen <mika.heiskanen@fmi.fi> wrote:
Hi,
I do not know the status of boost on this matter, but for other implementions you might want to have a look at a NIST report on "Numerical Evaluation of Special Functions" at
http://math.nist.gov/mcsd/Reports/2001/nesf/paper.html
--> Mika Heiskanen
I am in need of computing Bessel functions of complex arguments. These are not implemented yet in the Boost library, correct? I try sending std::complex arguments to cyl_bessel or sph_bessel and they give me errors.
Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- Alessandro A. Bellina Graduate Student Bioacoustics Research Laboratory Electrical and Computer Engineering University of Illinois at Urbana-Champaign

Steve, You are right. In the mean time, I had made a subtle change to the functions. I am on Mac OS X, gcc 4.0.1. How about this (make functions const): #include <boost/function.hpp> #include <boost/bind.hpp> #include <functional> #include <iostream> struct X { int foo(const int i) const { return i+1; } template<class T> void foo( T& t ) const; }; int main() { boost::function<int(int)> f; X x; f = boost::bind(static_cast<int(X::*)(int)>(&X::foo), &x, _1); std::cout << f(5) << std::endl; }

I am trying to figure out the syntax to type cast it to use the templated function. -----Original Message----- From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Steven Watanabe Sent: Monday, July 07, 2008 7:59 PM To: boost-users@lists.boost.org Subject: Re: [Boost-users] Boost:Function bind to overloaded member AMDG James Sutherland wrote:
Steve, You are right. In the mean time, I had made a subtle change to the functions. I am on Mac OS X, gcc 4.0.1.
How about this (make functions const): <snip>
static_cast<int(X::*)(int) const>(&X::foo) In Christ, Steven Watanabe _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This message is intended only for the personal and confidential use of the designated recipient(s) named above. If you are not the intended recipient of this message you are hereby notified that any review, dissemination, distribution or copying of this message is strictly prohibited. This communication is for information purposes only and should not be regarded as an offer to sell or as a solicitation of an offer to buy any financial product, an official confirmation of any transaction, or as an official statement of Lehman Brothers. Email transmission cannot be guaranteed to be secure or error-free. Therefore, we do not represent that this information is complete or accurate and it should not be relied upon as such. All information is subject to change without notice. -------- IRS Circular 230 Disclosure: Please be advised that any discussion of U.S. tax matters contained within this communication (including any attachments) is not intended or written to be used and cannot be used for the purpose of (i) avoiding U.S. tax related penalties or (ii) promoting, marketing or recommending to another party any transaction or matter addressed herein.
participants (5)
-
Alessandro A. Bellina
-
James Sutherland
-
Khandelwal, Amit
-
Mika Heiskanen
-
Steven Watanabe