L
lord trousers
I'm implementing a garbage collector in C++ for a fun new language
(don't ask), and I've found that it spends a good amount of time
calling "finalize" on objects that are freed/not relocated. The
default implementation does nothing and always will, and most types
won't need to override it. It'd be nice if I could test for overrides,
but the obvious thing doesn't work:
class Object {
// ...
virtual void finalize() { }
// ...
};
// In the collector:
Object* pobj = <stuff>;
if (&pobj->finalize != &hv_Object::finalize)
pobj->finalize();
// GCC:
// ISO C++ forbids taking the address of a bound member function
// to form a pointer to member function. Say
'&hv_Object::finalize'
I'd love to do what it says, but I don't know the type of the object.
Is there an easy way to make this same test? I want to avoid RTTI and
compiler-specific language extensions, and also make it externally
transparent.
Neil
(don't ask), and I've found that it spends a good amount of time
calling "finalize" on objects that are freed/not relocated. The
default implementation does nothing and always will, and most types
won't need to override it. It'd be nice if I could test for overrides,
but the obvious thing doesn't work:
class Object {
// ...
virtual void finalize() { }
// ...
};
// In the collector:
Object* pobj = <stuff>;
if (&pobj->finalize != &hv_Object::finalize)
pobj->finalize();
// GCC:
// ISO C++ forbids taking the address of a bound member function
// to form a pointer to member function. Say
'&hv_Object::finalize'
I'd love to do what it says, but I don't know the type of the object.
Is there an easy way to make this same test? I want to avoid RTTI and
compiler-specific language extensions, and also make it externally
transparent.
Neil