最近,我一直在寻找C++
中使用的多态集合,并遇到了boost的base_collection
。我对此很满意,但是插入后集合迭代器变得无效,这严重限制了它的使用范围:
#include <boost/poly_collection/base_collection.hpp>
class base
{
public:
////
const string& get_name() const
{
return name;
}
////
};
class derived : public base
{
////
};
int main()
{
boost::base_collection<base> collection;
auto iterator = collection.insert(derived{"test"});
std::cout << iterator->get_name(); //"test"
for(auto i{0}; i < 100; ++i)
collection.insert(derived{"test" + i});
std::cout << iterator->get_name(); //not "test" anymore
return 0;
}
指定自定义分配器(例如boost::pool
)并不会解决问题,因为显然base_collection
始终使用::new
来分配存储空间。
有人对如何使迭代器保持有效有任何想法吗?