C++ 构造函数委托前的错误检查
C++ Error checking before constructor delegation
我有一个从 size_t 维度创建矩阵的构造函数,我想添加对 int 维度的支持。但是,在将整数传递给 size_t 构造函数之前,我想确保它们是正数。
Matrix(vector<double> vals, int rows, int cols )
\throw something if rows<= 0 || cols<= 0
:Matrix(vals,static_cast<size_t>(rows), static_cast<size_t>(cols))
这样的事情可能吗?
通过函数传递它们,
int enforce_positive(int x)
{
if (x <= 0) {
throw something;
}
return x;
}
Matrix(vector<double> vals, int rows, int cols )
: Matrix(vals,
static_cast<size_t>(enforce_positive(rows)),
static_cast<size_t>(enforce_positive(cols)))
当然,您可以将其设为模板。
您还可以使用“证明类型”并在原型中明确说明条件。像
temolate<typename T>
class Positive
{
public:
explicit Positive(T x): val(x)
{
if (val <= 0) {
throw something;
}
}
operator T() const { return val; }
private:
T val;
};
Matrix(const vector<double>& vals,
Positive<int> rows,
Positive<int> cols )
: Matrix(vals,
static_cast<size_t>(rows),
static_cast<size_t>(cols))
//...
int x = ...;
int y = ...;
Matrix m(stuff, Positive(x), Positive(y));
我有一个从 size_t 维度创建矩阵的构造函数,我想添加对 int 维度的支持。但是,在将整数传递给 size_t 构造函数之前,我想确保它们是正数。
Matrix(vector<double> vals, int rows, int cols )
\throw something if rows<= 0 || cols<= 0
:Matrix(vals,static_cast<size_t>(rows), static_cast<size_t>(cols))
这样的事情可能吗?
通过函数传递它们,
int enforce_positive(int x)
{
if (x <= 0) {
throw something;
}
return x;
}
Matrix(vector<double> vals, int rows, int cols )
: Matrix(vals,
static_cast<size_t>(enforce_positive(rows)),
static_cast<size_t>(enforce_positive(cols)))
当然,您可以将其设为模板。
您还可以使用“证明类型”并在原型中明确说明条件。像
temolate<typename T>
class Positive
{
public:
explicit Positive(T x): val(x)
{
if (val <= 0) {
throw something;
}
}
operator T() const { return val; }
private:
T val;
};
Matrix(const vector<double>& vals,
Positive<int> rows,
Positive<int> cols )
: Matrix(vals,
static_cast<size_t>(rows),
static_cast<size_t>(cols))
//...
int x = ...;
int y = ...;
Matrix m(stuff, Positive(x), Positive(y));