[C++-sig] operator in return false while operator == return true

Stefan Seefeld seefeld at sympatico.ca
Fri Sep 24 16:27:51 CEST 2010


  Simon,

I don't quite understand what you are trying to do. Please provide a 
little more detail. Your current mail requires far too much 
second-guessing to be useful.

On 09/24/2010 10:08 AM, Simon W wrote:
> Hi,
>
> Im really scared because I fear a fundamental issue concerning the 
> script system in my game engine.
>
>
> In C++, I have a class. In my class I map data to GameObject like:
>
> *class
> {
>     map<GameObject*, Data> .....
> }*

OK. (Naming this class would help the discussion, though.)

>
> As you see, I use the pointer as key.
>
> When I from c++, in the same class, call a python function I pass the 
> key like this:
>
> *class::callPythonFunctions()
> {
>    
> boost::python::get_override("callbackFunction")(boost::python::object(boost::python::ptr(gameobject))); 
> // the variable /gameobj /is of type GameObject*
> }
> *

OK.

>
> When I recieve the call in python I do some checks like this:
>
> *def callbackFunction(self, gameobj):
>    for x in self.mydict.keys():
>      print("Checking")
>      print(gameobj == self.mydict)
>      print(gameobj in self.mydict)*

This looks wrong. You iterate over 'x', but don't use it in the loop. 
May I assume that 'mydict' relates to the above map<GameObject*, Data> 
in the unnamed class ?

>
>
> The above will print something like:
> /....
> Checking
> True
> False
> .../

This suggests that 'gameobj' compares equal to the 'mydict' object, but 
that it is not itself included in the sequence returned by mydict.keys().


>
> I do have a overloaded == operator. But how can I fix so that python 
> checks for my pointer and not the PyObject* pointer ?

What type do you consider providing an operator== for ?

     Stefan


-- 

       ...ich hab' noch einen Koffer in Berlin...



More information about the Cplusplus-sig mailing list