[C++-sig] working with raw const pointers

Gennadiy Rozental rogeeff at gmail.com
Thu Jul 17 20:44:05 CEST 2008


We having so much fun here, so I've decided to revive several questions I posted
in boost lists, that never got any attention.

Hi,

In our system there are a lot of  pointers to const objects flying around. I've
got several problems  in this regard. They can be exhibited by the following
code snippet:

a.cpp :
class A{};

void boo1( A const* )   {}
void boo2( A* )         {}

A const*    make_const_a()      { return (A const*)0; }
A*          make_non_const_a()  { return (A*)0; }

std::vector<A const*>
make_vec()
{
    return std::vector<A const*>( 1 );
}

....

class_<A,boost::noncopyable>( "A", bp::no_init );

class_<std::vector<A const*> >( "AVec", bp::no_init )
    .def( vector_indexing_suite<std::vector<A const*> >() )
    ;

def( "boo", &boo1 );
def( "boo", &boo2 );

def( "make_const_a", &make_const_a,
return_value_policy<reference_existing_object>() );
def( "make_non_const_a", &make_non_const_a,
return_value_policy<reference_existing_object>() );

def( "make_vec", &make_v ec );

Problem I. Access to mutable func 

Following python statement 
mymodule.boo( mymodule.make_non_const_a() ) 

seems to call incorrect function boo

Problem II. Vector fails completely 

Following python statements

vec = pytoolkit.make_vec();
for e in vec: pass

produce

TypeError: No to_python (by-value) converter found for C++ type: class A const *

Any advise?

Gennadiy





More information about the Cplusplus-sig mailing list