我正在寻找做这样事情的最好方法:
class variable{
protected:
variable()
int convert[][]
}
class weight: variable{
public:
weight(){
convert = {{1,2},{1,3},{2,5}}
}
现在我知道我不能这样做,因为我必须提前声明数组大小。我有很多类都继承自基类变量,而变量有一个使用convert的函数,所以不要分别在每一个中声明转换。对于每个类,数组长度将保持不变,因此使用列表似乎是不必要的。 你有什么建议。
非常感谢。
答案 0 :(得分:4)
有几种选择。
std::vector
。std::array
(仅适用于C ++ 11)或者做这样的事情:
template<size_t M, size_t N>
class variable{
protected:
int convert[M][N];
};
class weight: variable<3,2>{
public:.
weight(){
//convert = {{1,2},{1,3},{2,5}} //you cannot do this for arrays
//but you can do this:
int temp[3][2] = {{1,2},{1,3},{2,5}};
std::copy(&temp[0][0], &temp[0][0] + (3*2), &convert[0][0]);
};
或者您也可以将std::vector
或std::array
与模板一起使用。
答案 1 :(得分:0)
似乎最好在基类中使用私有纯虚方法,并在派生类中实现它。 目前尚不清楚你的“转换”数组总是有两个维度,这就是为什么我使用“你的类型”而不是应该存储在返回容器中的真实类型。大概看起来像这样:
class variable {
private:
virtual std::vector<"your type"> getConvertMatrix() const = 0;
void someMethodThatNeedsConvertMatrix() {
// ...
std::vector<"your type"> convertMatrix = getConvertMatrix();
// ...
}
}
class weight : public variable {
private:
virtual std::vector<"your type"> getConvertMatrix() const {
// your implementation
// form vector and return it, or return vector declared as member
}
}