c++ - 构造函数参数的条件

标签 c++ c++11

<分区>

是否可以针对某些约束检查构造函数的参数,如果不满足,则对象未创建并返回一个值以告知创建失败。

例如。

Class Device
{
   string id;
   Device(string ID)
   {
          If (ID.Length != 7)
          {
              //Do not create Object
          }
    id == ID;
   }

}

这里我只想要 7 char long id String,不能少不能多!如果它不是 7 个字符,我不想创建对象,是否可以这样做?

除了外部功能检查之外,我想不出任何解决方案,这是我想远离的!

最佳答案

通常的方法是检查条件,如果不满足,则抛出异常。

另一种可能性是接受 7 个字符的数组,因此如果传递了其他内容,代码将无法编译。不过,这往往很难正常工作(例如,如果有人传递了错误类型的对象,即使是实际上包含 7 个字符的字符串,它通常也不会起作用)。

一种中间点是创建一个专门用于保存 7 个字符的字符串的类型,如果长度错误,则在其 ctor 中抛出异常。这可以提供更多的粒度,以便在抛出异常时更容易知道出了什么问题,并确保创建 Device如果您向对象传递一个有效的 DeviceName,它就会成功(或您喜欢的任何名称)对象。

关于c++ - 构造函数参数的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34617654/

相关文章:

c++ - 文字冒险游戏-如何区分一种元素类型以及如何构造元素类/子类?

c++ - 需要计算特定单词的实例数

c++ - 如果线程是从 dll 创建的,std::async 是否会阻止进程退出?

c++ - 如何使用智能指针对象执行成员函数指针?

c++ - 将值设置为 static const unsigned int

c++ - 命名管道 : ReadFile after ConnectNamedPipe return ERROR_BROKEN_PIPE

c++ - 在 Visual Studio 中从 1 个项目构建多个目标

c++ - QTextFormat 的对象索引是什么?

C++11 可变参数模板 : return tuple from variable list of vectors

c++ - 为什么 "default"是复制/移动构造函数或析构函数?