2

以下のような基本クラスがあるとします。

template <typename T>
class Base {
    // implementation
    void do_something() { /* ... */ } ;
};

次に、Derived以下のようにクラスを作成し、do_something()メソッドをオーバーライドします。

template <typename T>
class Derived : public Base<T> {
    // implementation
    void do_something() { /* ... */ } ;
};

クラス テンプレートでは仮想化が機能しないことはわかっており、メソッドの実装を隠しているだけです。しかし、一連の派生クラスと基本クラスをベクトルに格納したい (型消去やポリモーフィズムを使用したくない)、

私の質問は、クラスからベースクラスへのクラスがベースクラスを与えることstatic_castDerived考えるとdo_something、それぞれがクラスの実装を持っている間にそれらをベースクラスとして保存できる方法はありますdo_something()か?

4

4 に答える 4

2

しかし、一連の派生クラスと基本クラスをベクトルに格納したい (型消去やポリモーフィズムを使用したくない)、

これは、C++ ではすでに不可能です。C++ では、ベクトルには同じ静的型のオブジェクトのみを含めることができます。ベクターに異なるタイプのオブジェクトを含めることができる唯一の方法は、それらの静的タイプが同じであるが動的タイプが異なる場合ですが、これはタイプ消去/ポリモーフィズムであり、使用したくないと言っていました。

あなたの質問は本質的に次のように書かれているので、要件を再考する必要があると思います。

于 2017-04-29T23:16:15.713 に答える