On Dienstag, März 11, 2003, at 04:39 Uhr, David Abrahams wrote:
Dirk Gerrits <dirk@gerrits.homeip.net> writes:
As Dave mentioned, you need to use x.attr("__len__")(). Notice the *additional* pair of braces.
True, but that result is just an 'object'. He needs extract<std::size_t>(x.attr("__len__")()) to get a size_t out of it.
Thank you, this works fine. But I still cannot get along with my stuff... My plan is to insert references to C++ objects within a boost::python::list. The code looks like the following: class X { // ... }; class Y { public: void insert(X &); boost::python::list xlist; }; void Y::insert(X &x) { // do some other things xlist.insert(0,x) } int main() { X x; Y y; y.insert(x); } Unfortunately this little snippet crashes: Program received signal SIGABRT, Aborted. [Switching to Thread 1024 (LWP 26257)] 0x401a6df1 in kill () from /lib/libc.so.6 (gdb) bt #0 0x401a6df1 in kill () from /lib/libc.so.6 #1 0x4008f06d in pthread_kill () from /lib/libpthread.so.0 #2 0x4008f5eb in raise () from /lib/libpthread.so.0 #3 0x401a84d9 in abort () from /lib/libc.so.6 #4 0x4012a5d7 in __cxxabiv1::__terminate(void (*)()) () from /usr/lib/libstdc++.so.5 #5 0x4012a624 in std::terminate() () from /usr/lib/libstdc++.so.5 #6 0x4012a7a6 in __cxa_throw () from /usr/lib/libstdc++.so.5 #7 0x4004df59 in boost::python::throw_error_already_set() () from /usr/local/lib/libboost_python.so.1.29.0 #8 0x080e9fea in boost::python::converter::arg_to_python<Node>::arg_to_python(Node const&) () #9 0x080e8c41 in _object* boost::python::api::object_initializer<false, false>::get<Node>(Node const*, int*) () #10 0x080e777c in boost::python::api::object::object<Node>(Node const&) () #11 0x080e748d in void boost::python::list::insert<Node>(int, Node const&) () #12 0x080e63cf in Network::add_node(Node&) () #13 0x080e2858 in DynamicNetwork::add_node(DynamicNode&) () #14 0x080e1e81 in main () #15 0x401954a2 in __libc_start_main () from /lib/libc.so.6 What am I doing wrong this time? My general ambition is to reimplement some classes originally written in python. So my intention is not to not intrude the underlying C++-classes, but rather to not intrude the overlying python-classes. This is why I need a boost::python::list as a public member of some C++ classes. The references inside the list must be accessible from either python and C++. Do you think this approach is passable with boost::python or is this a misuse of the library? thank you, - harold - -- Live in a world of your own. But always welcome visitors. --