我编写了一个包含std::vector
实例的自定义容器类- 效果很好.为了与其他API兼容,我想将容器的内容导出为std::vector
副本.目前这有效:
MyContainer container; .... std::vectorvc(container.begin(), container.end());
但如果可能的话希望能够写:
MyContainer container; .... std::vectorvc(container);
我可以(轻松地)创建这样的std::vector
构造函数吗?
您可以创建一个显式转换std::vector
:
explicit operator std::vector() const { return std::vector (begin(), end()); }
然后,std::vector
将调用std::vector
移动构造函数.
请注意,计算成本高昂的转换通常不受欢迎.因此,矢量工厂函数可能是一种更明智的方法:
class MyContainer { public: using value_type = double; // ... }; templateauto to_vector(Source source) { return std::vector (source.begin(), source.end()); }
然后你会写:
MyContainer container; // ... auto vc = to_vector(container);
这也是更通用的,因为它与任何有兼容的工作value_type
,begin
和end
成员.