[C++-sig] Overriding operator == and = for None

Andreas Beyer mail at a-beyer.de
Wed Jun 21 11:22:08 CEST 2006


Hi,

I think there are two things to do.
First, NullableIntVec has to define a wrapper method for __setattr_(), 
which would have to accept python objects and either create a new empty 
NullableInt or a NullableInt initialized with the respective value.

Second, you will have to wrap __eq__(), __ne__() and/or __cmp__() of 
NullableInt in order to get the desired behaviour for ==.
I suggest implementing 'rich comparison', because that would allow you 
to do things like this:

 >>> c = NullableInt(3)
 >>> c < 4
 >>> True

See also here:
http://docs.python.org/ref/customization.html
http://www.boost.org/libs/python/doc/tutorial/doc/html/python/exposing.html#python.class_operators_special_functions


Again, these wrappers will have to accept python objects (i.e. 
boost::python::object) as arguments, otherwise you can't properly 
compare against None.

Hope that helps,
   Andreas

Will Lee wrote:
> Is there a way I can override the operator == and = for a wrapped c++ 
> object to take in a Python None type?  Essentially, I'd like to define 
> a class where it can do:
>
> #NullableInt is a struct that holds an int and a boolean, indicating 
> whether it is valid or not
> c = NullableInt(3)
> # NullableInt wraps a C++ std::vector<NullableInt>
> cv = NullableIntVec()
> cv.append(c) # ok
> cv[0] = None
> print cv[0]
> # should print out "None", and the C++'s struct would hold a boolean 
> that's set to false
>
> # Generates an invalid Int
> cInvalid = NullableInt()
> # Should be true, it won't remove object but setting the underlying 
> c++ object to None)
> cv[0] == cInvalid
> # Should also be true if we can override ==
> cv[0] == None
>
> Does anybody know if it is posslbe in Boost.Python to have this behavior?
>
> Will
> ------------------------------------------------------------------------
>
> _______________________________________________
> C++-sig mailing list
> C++-sig at python.org
> http://mail.python.org/mailman/listinfo/c++-sig
>   


-- 
Dr. Andreas Beyer
mail at a-beyer.de
www.andreas-beyer.de




More information about the Cplusplus-sig mailing list