Sharing: member type deduction for member pointers (Alf's device?)
Vladimir Jovic
vladaspams at gmail.com
Mon Jul 19 03:41:17 EDT 2010
Alf P. Steinbach /Usenet wrote:
> #include <progrock/cppy/PyClass.h> // PyWeakPtr, PyPtr, PyModule,
> PyClass
> using namespace progrock;
>
> namespace {
> using namespace cppy;
>
> struct Noddy
> {
> PyPtr first;
> PyPtr last;
> int number;
>
> Noddy( PyWeakPtr pySelf, PyPtr args, PyPtr kwArgs )
> : number( 0 )
> {
> devsupport::suppressUnusedWarning( pySelf );
>
> PyWeakPtr pFirstName = 0;
> PyWeakPtr pLastName = 0;
>
> static char* kwlist[] = { "first", "last", "number", 0 };
>
> ::PyArg_ParseTupleAndKeywords(
> args.rawPtr(), kwArgs.rawPtr(), "|OOi", kwlist,
> pointerTo( pFirstName ), pointerTo( pLastName ), &number
> )
> >> Accept< IsNonZero >()
> || throwX( "Invalid args" );
>
> if( pFirstName != 0 ) { first = pFirstName; }
> if( pLastName != 0 ) { last = pLastName; }
Why not initiallize all member variables in the initializer list?
> }
>
> PyPtr name()
> {
> (first != 0)
> || throwX( ::PyExc_AttributeError, "first" );
> (last != 0)
> || throwX( ::PyExc_AttributeError, "last" );
Nice trick. I would still find this more readable :
if ( first != 0 )
{
throwX( ::PyExc_AttributeError, "first" );
}
> return (PyString( first ) + L" " + PyString( last )).pyPtr();
> }
> };
>
> struct NoddyPyClass: PyClass< Noddy >
> {
> NoddyPyClass( PyModule& m, PyString const& name, PyString const&
> doc )
> : PyClass< Noddy >( m, name, doc, Exposition()
> .method(
> L"name", CPPY_GLUE( name ),
> L"Return the name, combining the first and last name"
> )
> .attribute(
> L"first", CPPY_GLUE( first ), L"first name"
> )
> .attribute(
> L"last", CPPY_GLUE( last ), L"last name"
> )
> .attribute(
> L"number", CPPY_GLUE( number ), L"noddy number"
> )
> )
> {}
> };
>
> class NoddyModule: public PyModule
> {
> private:
> NoddyPyClass noddyPyClass_;
>
> public:
> NoddyModule()
> : PyModule(
> L"noddy2", L"Example module that creates an extension
> type." )
> , noddyPyClass_( *this,
> L"Noddy", L"A Noddy object has a name and a noddy number" )
hmmm what is L ?
More information about the Python-list
mailing list