整数とそのクラスの以前のインスタンスの 2 つの引数を取ることによって構築されるテンプレート クラスがあります。これらのクラスのインスタンスをコンテナーに格納できるようにしたいので、基本クラスから継承しています (非スマート ポインターは無視してください)。
class base {
virtual base* getNext(unsigned x) = 0;
};
template <class D>
class derived :
public base {
/* no memory allocation here, simply changes the data in next */
void construct_impl(unsigned x, const derived<D>& previous, derived<D>& next);
derived(); /* default constructor */
derived(unsigned x, const derived<D>& previous) { /* construct from previous object */
allocate_memory_for_this();
construct_impl(x, previous, *this);
}
base* getNext(unsigned x) {
return new derived(x, *this);
}
};
ここで、同じ方法でbase
オブジェクトを構築するクラスに関数を作成したいと思います。つまり、メモリを新たに割り当てません。こんなことを考えていたderived<D>
construct_impl
class base {
virtual base* getNext(unsigned x) = 0;
virtual void getNext_noalloc(unsigned x, base* already_allocated_derived_object) = 0;
}
このような派生クラスでオーバーライドされます
void getNext_noalloc(unsigned x, base* already_allocated_derived_object) {
construct_impl(x, *this, *already_allocated_derived_object);
}
base*
からへの変換がないため、残念ながらコンパイルされませんderived<D>*
(static_castを使用しない限り)。必要なものを達成する方法はありますか? 前もって感謝します!