我有没有抛出一个例外
Have I to throw an exception?
>假设我的类有一个静态方法,它返回与我的类类型相同的对象。例如,要创建对象,此方法必须解析一个字符串:
class C
{
public:
static C get_obj(const std::string& str)
{
C obj;
// Parse the string and set obj properties
return obj;
}
};
如果在解析字符串时收到错误并且无法将对象构造为有效对象,我是否要抛出异常或其他什么?
鉴于get_obj
存在失败的可能性,必须以某种方式将失败报告给调用方。 这通常由
- 引发异常
- 在方法的输出中传达失败
在此特定情况下,该方法的唯一输出是C
实例。 鉴于引发异常可能是此签名方法的最佳选择。 唯一的其他选择是将成功/失败嵌入到C
对象中,您几乎肯定不想这样做。
解决此问题的另一种方法是try_parse
模式。 让bool
返回指示成功/失败,并通过引用参数在成功时返回构造的对象
bool try_parse(const std::string& str, C& obj) {
if (string is valid) {
obj = C(...);
return true;
}
return false;
}
我会说你应该抛出一个异常。通过这种方式,您可以通知客户无法获得 obj,并迫使他处理此问题。
如果不重要(不重要),您可以返回一个特殊C
,该将充当指示出现问题的哨兵值。客户将选择是否对此执行某些操作。
我会例外。不建议使用第二种方法。
是的,抛出异常是完全有效的。构造对象时的原因相同,如果您无法继续构造对象,则别无选择,只能抛出异常。
是的,你确实需要抛出一个异常。
class C
{
public:
static C get_obj(const std::string& str)
{
try
{
C obj;
// Parse the string and set obj properties
return obj;
}
catch (int x)
{
cout "blahblah";
}
}
};
如果无法构造对象,则冒着 0 变量的风险,这可能会进一步造成很多麻烦
相关文章:
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- conan有没有办法导出一个空目录
- 有没有可能有一个只有ADL才能找到的非好友功能
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 有没有一个 c++ gmp 库函数与 python gmpy2 库 divm(..) 函数相同?
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 有没有办法生成一个包含平方的序列,这些平方加起来就是一个整数平方?
- 有没有可能制作一个 constexpr 树?
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 有没有办法在一个C++程序中同时使用 FFTW 和 cuFFTW?
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 有没有办法在另一个函数中加入线程?(即超出其自身范围)
- 有没有办法让我编写一个可以在Windows和Linux上运行的命令行游戏?
- 有没有一个迭代器的例子,它不会使用 ptrdiff_t 作为其difference_type?
- 给定一个源文件,有没有办法要求 gcc 返回仅直接包含的头文件的列表?
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i