Bisakah saya memegang shared_ptr tanpa mengetahui parameter type? [duplikat]
Aug 17 2020
Saya ingin mengadakan shared_ptr
kelas template. Namun, saya tidak ingin menjadikan kelas B sebagai kelas template juga. Dalam pemahaman saya, shared_ptr dengan tipe apapun akan memiliki tata letak memori yang sama. Jadi saya ingin tahu solusi apa pun dalam skenario ini?
template<T>
class A {
...
};
class B {
...
std::shared_ptr<A<T>> ptr;
}
Jawaban
2 AtnNn Aug 17 2020 at 17:19
Bila jenisnya tidak masalah sama sekali, void
bisa digunakan.
template <typename>
class C {};
std::shared_ptr<void> p = std::make_shared<C<int>>();
Menambahkan kelas dasar monomorfik memungkinkan pembatasan jenis yang dapat disimpan.
class AnyC {};
template <typename>
class C : public AnyC {};
std::shared_ptr<AnyC> p = std::make_shared<C<int>>();
Jika kelas dasar tersebut memiliki metode virtual, mereka dapat dipanggil melalui penunjuk.
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();
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'