On 21.03.2010 06:07, Roman Yakovenko wrote:
On Sat, Mar 20, 2010 at 11:10 PM, Maciej Sitarz<macieksit...@wp.pl> wrote:
Just one more comment...
The constructor takes reference to vector<JobPropertyWrapper>, so I suspect
that maybe it will be filled there by some other code I don't have? So I
don't need to fill the vector, just to create it (I will ask the developers)
Right, you'd better talk with them. Boost.Python allows to export
libraries without touching them, but sometimes a small library change
could make you task easier.
Yes, it works, because there's no code generated for std::vector<item_t>
Try adding this function to item_t class:
void fund( std::vector<item_t>& v) { }
And then it doesn't compile successfully.
When I comment this line from the generated code:
vector_less__item_t__greater__exposer.def( bp::indexing::vector_suite<
std::vector< item_t > >() );
it compiles and appears to work, but I can't figure out how to pass a
list/vector to that function:
import test
item = test.item_t( 10 )
vect = [test.item_t(1), test.item_t(2)]
item.fund(vect)
---------------------------------------------------------------------------
ArgumentError Traceback (most recent call last)
/home/macieks/error_examples/protected_assign/<ipython console>
ArgumentError: Python argument types in
item_t.fund(item_t, list)
did not match C++ signature:
fund(item_t {lvalue}, std::vector<item_t, std::allocator<item_t> >
{lvalue} v)
In [5]: vect
Out[5]:
[<test.item_t object at 0x7f8f38899e10>,
<test.item_t object at 0x7f8f38899d60>]
In [6]: vect?
Type: list
Base Class: <type 'list'>
String Form: [<test.item_t object at 0x7f8f38899e10>, <test.item_t
object at 0x7f8f38899d60>]
Namespace: Interactive
Length: 2
Docstring:
list() -> new list
list(sequence) -> new list initialized from sequence's items
I'm not sure, but that should work, shouldn't it?
--
Maciek Sitarz
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig