Предположим, у нас есть следующее, данный код:
class T; // with T::~T is virtual
class S;
class E {
void foo() {
/* ... */
S s;
T* t = new T(s);
/* ... */
delete t;
/* ... */
}
};
Мы не можем изменить E
.
Предположим, что у нас есть:
class S;
class A {
class T : public ::T {
T(S);
}
};
Есть ли любым способом (в C ++ 03!) Мы можем заставить E
создать экземпляр A::T
вместо ::T
в E::foo
, не изменяя реализацию E::foo
или E
в целом?
Примечание: если действительно необходимо, было бы приемлемо сделать E
наследуемым от того, что мы указываем (например, A
), но я бы предпочел не делать этого.
Общее примечание: Да, это пахнет недостатком дизайна, но я принимаю осознанное решение иметь очень небольшую часть кода интеграции, которая слегка взломана, так что все остальные (больше!)детали могут быть красиво независимыми и хорошо продуманными.