I've been working on Olex2, a crystallography software package, for over 20 years. At some point I needed pointers whose target wasn't a fixed address but a runtime decision — "whatever is currently the active object of this type."
The result was
olx_vptr — a virtual pointer where resolution is delegated to a user-defined get_ptr():https://github.com/pcxod/olex2/blob/master/sdl/olxvptr.h
The calling code uses natural pointer syntax and knows nothing about how resolution happens. A concrete use looks like this:
struct VPtr : public olx_virtual_ptr<TXFile> {
virtual IOlxObject *get_ptr() const;
};
olx_vptr<TXFile> thip(new VPtr());
lib->Register(
new TFunction<TXFile>(thip, &TXFile::LibGetFormula, "GetFormula", .....
(https://github.com/pcxod/olex2/blob/master/xlib/xfiles.cpp#L1427)
Single virtual dispatch, fully type-safe, open to any resolution strategy.
I'm surprised this pattern never made it into the standard or common literature. Has anyone seen something similar? Would there be interest in a more formal writeup?
https://redd.it/1spvxx6
@r_cpp