Boost::ptr_vector和克隆对象
boost::ptr_vector and cloning objects
我试图使用boost::ptr_vector,具有抽象基类,但我得到编译错误。
/////////////////////////////////////////////////////////////////////////
// Clonable concept
/////////////////////////////////////////////////////////////////////////
template< class T >
inline T* new_clone( const T& r )
{
//
// @remark: if you get a compile-error here,
// it is most likely because you did not
// define new_clone( const T& ) in the namespace
// of T.
//
T* res = new T( r );
BOOST_ASSERT( typeid(r) == typeid(*res) &&
"Default new_clone() sliced object!" );
return res;
}
我不明白为什么我需要提供一个克隆函数。这就是我想要一个指针向量的全部原因。它应该复制指针,而不需要克隆函数。
我想我找到问题了。我实际上想要一个2d的指针向量,所以我创建了一个std::vector的boost::ptr_vector。但我认为它的ptr_vector复制构造函数执行对象的深度复制,因此错误?在以下代码中,如果我取消注释任何行,我得到编译错误C2259: 'Engine::IPlot':无法实例化抽象类C:boost_1_48_0boostptr_containerclone_allocator.hpp 34。还有什么方法可以得到二维数组呢?
class World : public IWorld
{
public:
World(const Engine::PairInt& plot_size);
virtual ~World();
virtual const Engine::PairInt& GetPlotSize() const;
virtual Engine::IPlot *GetPlot(Engine::PairInt coord);
virtual const Engine::IPlot *GetPlot(Engine::PairInt coord) const;
protected:
typedef std::vector< boost::ptr_vector< IPlot > > PlotMap;
PlotMap plot_map;
const Engine::PairInt plot_size;
};
World::World(const PairInt& plot_size_in)
: plot_size(plot_size)
//, plot_map(GetPlotSize().y)
{
PairInt plot_size = GetPlotSize();
//plot_map.reserve(plot_size.y);
for (int y = 0; y < plot_size.y; y++)
{
//plot_map.push_back(boost::ptr_vector< IPlot >());
for (int x = 0; x < plot_size.x; x++)
{
plot_map[y].reserve(plot_size.x);
plot_map[y].push_back(IPlot::Create(Vector2(PairInt(x, y).ToVector2()), true));
}
}
}
我的水晶球告诉我你使用的是resize
。不要用它,用push_back之类的
相关文章:
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- 传递 std::vector of std::shared_ptr,而不是更新对象
- vector是否为std::移动的对象连续分配内存
- 为什么 vector 的方法调整大小会创建一个额外的对象?
- 将RVO对象传递到std::vector::template_back
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 错误 C2280 / 在 std::vector 中实例化对象时复制构造函数出现问题?
- 如何从 Pyhon 端对存储在 std::vector 中的对象进行持久更改,作为 std::shared_ptr
- 如何将 Python 对象转换为 Cython 扩展类型的 std::vector 并返回?
- 访问类的 std::vector 与 for 循环中的 custum 类对象
- 如何将类对象push_back到 std::vector 中
- 具有另一个类对象的 std::vector 的类
- 使用运算符重载添加存储在 vector 中的类对象
- 我如何在std :: vector中生成对象,而无需复制
- 如何在用户定义类型的向量上使用 vector::p ush_back() 来仅修改一个对象?
- C++ std::vector 创建对象然后添加对象与在向量中创建对象之间的区别?
- 在<Object>基于范围的 for 循环中从 std::vector 获取指向对象的指针
- 成员功能在面向对象的框架中返回std :: vector.size()的效率
- 不允许抽象类类型的对象 "Vector<LinkedList<int>>"