Hi Pertti I had the same problem as you in my binding implementation, then I solve the problem using this function:
// // a generator with an execute() function which, given a source type // and a pointer to an object of that type, returns its most-derived // /reachable/ type identifier and object pointer. // // first, the case where T has virtual functions template <class T> struct polymorphic_id_generator { static dynamic_id_t execute(void* p_) { T* p = static_cast<T*>(p_); return std::make_pair(dynamic_cast<void*>(p), class_id(typeid(*p))); } }; I use this function to get a pointer to most-derived type and use this as key in my hash table. BR Renato Araujo Oliveira Filho 2009/9/29 Pertti Kellomäki <pertti.kellom...@tut.fi>: > I have Python bindings for a C++ library that among other > things contains classes for describing the static structure > of a microprocessor. > > My background is in Lisp, so I am used to using object > identities (references) as keys. The C++ library can > be used in this fashion, e.g. looking up a register file > by name always returns the same object reference. > However, the C++ to Python mapping does not preserve object > identity, as a new Python object is created for every query, > even if the underlying C++ reference is the same. > > Is there any easy way to preserve object identity in this > sense with Boost Python? My first thought was to use some > kind of caching scheme so that consequent queries with a > particular name return the same object, but the problem is > that objects are not only looked up by name, they can also > be returned e.g. by asking for a parent object in a containment > hierarchy. > -- > Pertti > _______________________________________________ > Cplusplus-sig mailing list > Cplusplus-sig@python.org > http://mail.python.org/mailman/listinfo/cplusplus-sig > _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig