次のコードがあるとします。
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);
}
};
またはの実装を一般的に変更せずに、 inの代わりに強制的にインスタンス化できる方法はありますか(C++03 で!) ?E
A::T
::T
E::foo
E::foo
E
注: 本当に必要な場合は、E
指定したもの (例: ) から継承することは許容されますA
が、私はそうしないことを好みます。
一般的な注意: はい、これは設計上の欠陥のようなにおいがしますが、他のすべての (より大きな!) 部分が美しく独立してうまく動作するように、統合コードの非常に小さな部分をわずかにハッキングするという意識的な決定を下しています。設計。