私は共有ポインタを持つベクトルを持っています:
std::vector<std::shared_ptr<DescriptorsNs::Descriptor> > mDescriptorList;
これらのオブジェクトのコピーを含むベクターを返すゲッター関数が必要です。
void CatUpdater::getDescriptorList(std::vector<Descriptor*>& descriptorList) const
{
descriptorList.clear();
for (auto it = mDescriptorList.begin(); it != mDescriptorList.end(); it++)
{
descriptorList.push_back(*it);
}
}
問題は、 Descriptor が抽象クラスであり、それらをベクトルに追加しようとすると、次のように正しく記述されることです。
/usr/include/c++/4.7/ext/new_allocator.h|110|error: cannot allocate an object of abstract type ‘DescriptorsNs::Descriptor’|
すべてのタイプの派生クラスを試すことでこれを解決できstd::dynamic_pointer_cast
ますが、これを達成するためのより簡単な方法があるはずです。
元のオブジェクトを返されたベクトルにコピーするより良い方法を教えてもらえますか?