Sharing: member type deduction for member pointers (Alf's device?)

sturlamolden sturlamolden at yahoo.no
Sat Jul 17 10:19:46 EDT 2010


On 17 Jul, 15:02, "Alf P. Steinbach /Usenet" <alf.p.steinbach
+use... at gmail.com> 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; }
>          }
>
>          PyPtr name()
>          {
>              (first != 0)
>                  || throwX( ::PyExc_AttributeError, "first" );
>              (last != 0)
>                  || throwX( ::PyExc_AttributeError, "last" );
>              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" )
>          {}
>      };
>
> }    // namespace <anon>
>
> PyMODINIT_FUNC
> PyInit_noddy2()
> {
>      return cppy::safeInit< NoddyModule >();}


> I wonder if this is readable / self-documenting, or not?




Are you serious?

It's C++, Heaven forbid, and you wonder if it's readable or not?






















More information about the Python-list mailing list