typeパラメーターを知らなくてもshared_ptrを保持できますか?[複製]
Aug 17 2020
shared_ptr
テンプレートクラスを開催したいのですが。ただし、クラスBもテンプレートクラスにしたくありません。私の理解では、どのタイプのshared_ptrも同じメモリレイアウトになります。したがって、このシナリオでの回避策はありますか?
template<T>
class A {
...
};
class B {
...
std::shared_ptr<A<T>> ptr;
}
回答
2 AtnNn Aug 17 2020 at 17:19
タイプが全く関係ない場合は、void
使用できます。
template <typename>
class C {};
std::shared_ptr<void> p = std::make_shared<C<int>>();
単相基本クラスを追加すると、格納できる型を制限できます。
class AnyC {};
template <typename>
class C : public AnyC {};
std::shared_ptr<AnyC> p = std::make_shared<C<int>>();
その基本クラスに仮想メソッドがある場合、それらはポインターを介して呼び出すことができます。
class AnyC {
virtual void f();
};
template <typename>
class C : public AnyC {
void f() override;
};
std::shared_ptr<AnyC> p = std::make_shared<C<int>>();
p->f();