Sil*_*man 1 c++ validation constructor constants member
假设我有一个带有 const int 成员变量的简单类:
class MyClass{
public:
Myclass(int x, int y);
private:
const int importantNumber;
int anotherNumber;
};
MyClass::MyClass(int x, int y) :importantNumber{x}
{
this->anotherNumber = y;
}
Run Code Online (Sandbox Code Playgroud)
由于int importantNumberis const,我只能在构造函数创建对象期间设置它(使用成员初始化列表,如上所示)。
现在的问题是:在实际使用该值创建 importantNumber 之前,如何为构造函数的参数 x 添加验证?是否可以创建一个static int MyClass::validation(int a)并在构造函数的成员初始化列表上使用它,例如importantNumber{validation(x)}?
即使有可能,还有更好的方法吗?
你只需添加它即可。
MyClass::MyClass(int x, int y) : importantNumber{validate(x)}
{
this->anotherNumber = y;
}
Run Code Online (Sandbox Code Playgroud)
该int validate(int original)函数现在可以返回其他内容x,或者抛出异常,assert或者要求用户确认,无论您认为合适。
如果这只是一个简单的检查并且您不想编写函数,validate则可以使用 lambda:
MyClass::MyClass(int x, int y) :importantNumber{
[](int number){
assert(number > 0);
return number;
}(x)}
{
this->anotherNumber = y;
}
Run Code Online (Sandbox Code Playgroud)
尽管如果做得太过分,这可能会变得有点复杂。
| 归档时间: |
|
| 查看次数: |
942 次 |
| 最近记录: |