Хочу использовать реализации интерфейсов без динамической реаллокации объектов реализующих их,
способ примерно такой:
class Interface {
public:
virtual void someFun() =0;
};
class Derived1: public Interface {
public:
void someFun() {
//реализация...
}
};
class Derived2: public Interface {
public:
void someFun() {
//реализация...
}
};
class User { // потребитель
public:
Interface intf;
template <class T> changeIntfRealization() {
// возможные проверки на происхождение T от Interface на манер: static_assert(is_base_of<Interface, T>::value, "Ouch");
new (&intf)T(); // происходит подмена VPTR
}
};
int main() {
User user;
user.changeIntfRealization<Derived1> ();
user.intf.someFun(); // вызовется реализация Derived1
user.changeIntfRealization<Derived2> ();
user.intf.someFun(); // вызовется реализация Derived2
}
Собственно вопрос в топике.