尝试从C ++向量继承一个类并在构造函数中初始化它。我该怎么做?例如:
class Dataset:public std::vector<float>{
public:
Dataset(vector<float> val):*baseclass*(val){}
// bruteforce way. // Dataset(vector<float> val){//for every val[i] call push_back(val[i]);}
当然没有什么作为 baseclass ,我的意思是上面的语句是我想用val初始化向量的数据。如果没有push_back每个元素,我该怎么做?
答案 0 :(得分:8)
不要派生自std::vector<>
。这个课程从未打算从中衍生出来。请将类的实例用作成员:
struct Owns {
Owns() : the_vector_(42, 128) { }
private:
std::vector<float> the_vector_;
};
答案 1 :(得分:4)
你可以写:
Dataset(const vector<float> &val): std::vector<float>(val) {}
但最后,你真的不应该从std::vector
公开继承。有多个提示表明std::vector
并不意味着派生出来:
您无法阻止任何人将您的Dataset
对象视为std::vector<float>
,因为公共继承意味着Dataset
是 std::vector<float>
如果有人试图通过Database
指针删除std::vector<float>
对象,这将失败。
如果您想重复使用 std::vector
,请使用私有std::vector
成员,或私下继承并公开using
声明应包含的内容。