[C++-sig] Re: playing with pygame
by David Abrahams other posts by this author
Jun 6 2003 11:22AM messages near this date
[C++-sig] Re: playing with pygame
|
[C++-sig] Re: playing with pygame
"Brett Calcott" <brett.calcott@[...].nz> writes:
> >
> > lvalue_from_pytype is a simple template; take a look. You could write
> > an extract function which does the same thing, but which uses your
> > non-constant PyTypeObject* expression in place of the template
> > parameter, and register that just the way the lvalue_from_pytype
> > constructor does.
> >
>
> Uh yeah. That wasn't so hard.
>
> A bit of messing around with your template got me this:
>
> template <class Extractor>
> struct lvalue_from_nonconst_pytype
> {
> lvalue_from_nonconst_pytype(PyTypeObject *type)
> {
> // assume this is called only once
> m_type = type;
> converter::registry::insert(
> &extract, detail::extractor_type_id(&Extractor::execute));
> }
> private:
> static PyTypeObject *m_type;
>
> static void* extract(PyObject* op)
> {
> return PyObject_TypeCheck(op, m_type)
> ? const_cast<void*>(
> static_cast<void const volatile*>(
>
> detail::normalize<Extractor>(&Extractor::execute).execute(op)))
> : 0
> ;
> }
> };
>
> template <class Extractor> PyTypeObject *
> lvalue_from_nonconst_pytype<Extractor>::m_type = 0;
>
>
> BOOST_PYTHON_MODULE(test)
> {
> import_pygame_rect();
> lvalue_from_nonconst_pytype<extract_identity<PyRectObject> >
> need_this_or_msvc_barfs(&PyRect_Type);
>
> ...etc...
>
> }
Wow, for some reason I couldn't see a generic solution and didn't
think of doing it that way. That's totally cool! Maybe I should
change the implementation in the library to allow non-const
PyTypeObjects. It's more flexible, after all.
> I am having great fun :)
I'm very pleased :)
--
Dave Abrahams
Boost Consulting
www.boost-consulting.com
_______________________________________________
C++-sig mailing list
C++-sig@[...].org
http://mail.python.org/mailman/listinfo/c++-sig
Thread:
Brett Calcott
David Abrahams
Brett Calcott
Brett Calcott
David Abrahams
David Abrahams
|