[C++-sig] [boost.python] Interoperability with boost.bind

David Abrahams dave at boost-consulting.com
Mon Jul 4 14:24:00 CEST 2005


Markus Schöpflin <markus.schoepflin at comsoft.de> writes:

> David Abrahams wrote:
>
>> Markus Schöpflin <markus.schoepflin at comsoft.de> writes:
>
>>>Is boost.python compatible with boost.bind (see example below)? 
>
>> Not in that way, no.  The requirements of def() are clearly spelled
>> out in http://www.boost.org/libs/python/doc/v2/def.html#def-spec, and
>> bind_t<> specializations do not meet them ... mostly because I don't
>> have a way to deduce the signature of a bind expression.
>> 
>> However, you can do:
>> 
>>     def(
>>         "foo"
>>       , make_function(
>>             bind(foo,_1)
>>           , default_call_policies()
>>           , boost::mpl::vector<int,int>()
>>         )
>>     )
>> 
>> See http://www.boost.org/libs/python/doc/v2/make_function.html
>
> Thanks for the answer, Dave. IOW, if there would be a way to get the 
> signature of the bind expression, 

There is none. Consider that you can wrap function objects with
templated operator():

   struct F
   {
       template <class T>
       T* operator()(T) const;
   };

what is the signature of

     bind(F(),_1)

?

> maybe via some support from bind itself, there would be a way to
> make to original example work, right?

Right.  But there is no way to do it.

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com




More information about the Cplusplus-sig mailing list