[pygccxml-development] [py++] vector of vectors trouble
Brought to you by:
mbaas,
roman_yakovenko
From: Maik B. <bec...@go...> - 2009-01-16 13:21:42
|
Hello, I got two problems with vector of vectors 1. nested vector type isn't exported 2. renaming of "vector<vector<> >" doesn't work as expected =============================================== =============================================== 1. nested vector type isn't exported test.hpp (include guards omitted) {{{ #include <vector> void bar(std::vector<std::vector<double> > vv) { ... } }}} This is how I expect it to work in python {{{ from pyMaik import vector_less__double__greater_ as vector_double from pyMaik import vector_less__std_scope_vector_less__double__greater___greater_ as vvector_double from pyMaik import foo v1 = vector_double() v1.append(1) v2 = vector_double() v2.append(2) vv = vvector_double() vv.append(v1) vv.append(v2) foo(vv) }}} However, it doesn't work because std::vector<std::vector<double> > is exported, but std::vector<double> not. Adding a dummy to test.hpp void dummy(std::vector<double> v) { } solves this problem, but I wonder if there is a better way to do this. ================================================ 2. renaming of "vector<vector<> >" doesn't work as expected. To change this {{{ from pyMaik import vector_less__double__greater_ as vector_double from pyMaik import vector_less__std_scope_vector_less__double__greater___greater_ as vvector_double from pyMaik import foo }}} to {{{ from pyMaik import vector_double, vvector_double, foo }}} I've added the following to generate_code.py {{{ std = mb.namespace('std'); # do work: #mb.class_('::std::vector<double>').rename('vector_double') std.class_('vector<double>').rename('vector_double') # doesn't work: #std.class_('vector<vector<double> >').rename('vvector_double') #mb.class_('::std::vector<::std::vector< double > >').rename('vvector_double')# doesn't work #works: mb.class_('::std::vector< std::vector< double > >').rename('vvector_double') }}} As you can see from the comment vector<double> works nicely with, where std.class_('vector<double>').rename('vector_double') is what I prefer. For vector<vector<double> > I tried std.class_('vector<vector<double> >').rename('vvector_double') but it doesn't work. Then I tried mb.class_('::std::vector<::std::vector< double > >').rename('vvector_double') because because ::std::vector<double> worked above, but I it doesn't work either. The only statement I've found to get what I want is mb.class_('::std::vector< std::vector< double > >').rename('vvector_double') What are the rules (give me a RTFM with and a link if I missed it) ? Thanks, -- Maik |