[C++-sig] using function objects as getters/setters for the properties

David Abrahams dave at boostpro.com
Wed Feb 11 02:01:39 CET 2009


on Tue Feb 10 2009, Gennadiy Rozental <rogeeff-AT-gmail.com> wrote:

> Hi, 
>
> I need to implement some translation in a getter and setter for particular field.
>
> I am getting compile time errors, I am not sure how to fix. I am using 1.33.1.
>
> Here is what I do:
>
> template<typename T>
> struct Getter {
>     explicit Getter( MyClass T::* mem ) : m_member( mem ) {}
>
>     bp::object  operator()( T const& obj ) const
>     {
>         return /* conversion here */;
>     }
>
>     MyClass T::* m_member;
> };
>
> template<typename T>
> Getter<T>
> make_getter( MyClass T::* mem )
> {
>     return Getter<T>( mem );
> }
>
> ....

Frankly I'm not sure it's possible to use a function object in that way.
Have you tried simply using the data member pointer without the wrapper?

     bp::class_< MyClass >( "MyClass", bp::no_init )
         .add_property( "field", &MyClass::field )

??

>     bp::class_< MyClass >( "MyClass", bp::no_init )
>         .add_property( "field", make_getter( &MyClass::field ) )

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com


More information about the Cplusplus-sig mailing list