[C++-sig] Re: Is it possible to expose functions with variable argument lists?

GameGuy gameguy at eastlink.ca
Mon Feb 16 14:04:44 CET 2004


It looks like raw_function is definitely the way to go here.  It's not as painless as I was hoping 
for, but such is life.  ;)  Thanks a heap!

~Shaun



David Abrahams wrote:
> GameGuy <gameguy at eastlink.ca> writes:
> 
> 
>>Hello.
>>I have been using PYSTE and Boost.Python to wrap a C++ library for use in Python.  Very nice stuff.
>>
>>I have reached a stumbling block though:  There are several methods in
>>this library that have an ellipsis in their method declarations.  Eg:
>>
>>class Foo
>>{
>>     virtual void method(const char* bar, ... ) const = 0;
>>};
>>
>>Which I think can be wrapped with Boost.Python in the following way:
>>
>>struct Foo_Wrapper : Foo
>>{
>>     // ...
>>
>>     virtual void method(const char* p0, ... ) const {
>>         va_list args;
>>         va_start(args, p0);
>>         call_method< void >(self, "method", p0, args);
>>     }
>>};
>>
>>// ...
>>
>>     class_< Foo, Foo_Wrapper >("Foo", init<  >())
>>         .def("method", &Foo::method)
>>         ;
>>
>>
>>I saw it done this way in another library.  I haven't verified that it
>>works or not yet as I can't compile it yet (running into MSVC7
>>issues).
>>
>>Has anyone else had experience wrapping functions with variable argument lists?
>>Will this work in Boost.Python?
> 
> 
> 
> Short answer: no, this doesn't work.
> 
> Longer answer: you can't really get this to work in Boost.Python
> because it relies on being able to deduce the expected C++ types of
> arguments.
> 
> Longer answer still: you might be able use
> BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS to wrap this method for
> specific sequences of arguments.
> 
> http://tinyurl.com/2wptk
> 
> But now that I look I think it'll fail for the same reason.  I think
> the need to use call_method internally might give you problems, too.
> 
> I think your best bet might be to use the facilities of
> http://www.boost.org/libs/python/doc/v2/raw_function.html
> 
> 
>>Is it worth extending PYSTE to handle these cases?  (It doesn't currently)
>>
>>
>>Thank you for any assistance,
>>~Shaun
> 
> 





More information about the Cplusplus-sig mailing list