I have a struct that contains a C-style array data member. I'd like to have
this struct exposed to Python, and this data member be accessible as a tuple
in Python.
struct S
{
char arr[10];
};
void foo( S const * )
{}
BOOST_PYTHON_MODULE( test )
{
using namespace boost::python;
class_<S>( "S" )
.def_readwrite( "arr", &S::arr )
;
def( "foo", foo );
}
The code above fails to build
error C2440: '=' : cannot convert from 'const char [10]' to 'char [10]'
C-style arrays are not assignable, so the error makes sense. The code
compiles if I change the data member to a plain char instead of an array.
I cannot replace the array with an std::array or some other container
because the structure is being consumed by a C API. The only solution I can
think of is to write a couple of wrappers and do the following
1. A struct S1 that duplicates S except it'll have an std::array instead
of a C-style array
2. A foo_wrapper that accepts a S1 const *, copies the contents over to
an S instance and calls foo
3. Register a to_python_converter to convert the std::array to a Python
tuple
This should work, and I'm not too concerned about the data copying at this
point, but it'd be nice if I could avoid it and expose the array directly
without having to jump through all these hoops.
So the question is, how can I expose that C-style array data member to
Python as a tuple?
_______________________________________________
Cplusplus-sig mailing list
[email protected]
http://mail.python.org/mailman/listinfo/cplusplus-sig