1) Dejme tomu, že máme situaci, kdy máme nějaký C++ objekt v nějaké knihovně od kterého jsou poděděny objekty v jiných knihovnách, a potřebujeme přidat členskou proměnnou do tohoto objektu. Problémem ale je že máme zakázáno přidat členskou proměnnou, protože by to znamenalo rekompilaci všech závislostí. Jaké možnosti máme, a existuje nějaké elegantní řešení tohoto problému?
Napadá mě třeba:
.hxx:
class Object{
public:
//...
void call();
private:
int m_val1;
// void *m_handle; // tohle nemůžeme, změnila by se velikost instance Object
};
.cxx:
void Object:call() {
// tady potřebujeme inicializovat m_handle, aby se třeba nějaký zdroj zde získaný mohl později uvolnit
// ale bohužel nemůžeme přidat členskou proměnnou
}
2) dejme tomu, že můžeme provést právě jednu změnu v onom headeru (další bude povolena třeba až za dva roky...)
a) Jak nejlépe připravit objekt pro případ že by se daná situace s členskými proměnnými opakovala?
b) Jak vyřešit situaci kdy bychom chtěli přidat metodu která může mít různý počet parametrů, ale opět nebude moci změnit header? Je tohoto možno dosáhnout dynamicky bez rekompilace objekt (klient přihodí metodu která je potřeba přímo do instance objektu). Řešení může obsahovat nějaký call jiné metody jakp Object::Call(const char*, ...) => obj->call("nova_fce",param1,param2,param3,NULL);