【发布时间】:2014-04-08 08:52:39
【问题描述】:
我正在编写一个模板类,我需要一个方法将元素类打印到stdout。但是我在编写它时遇到了问题 - 如果我的元素类中没有定义或重载 cout << 或 operator const char*() 怎么办?
有没有办法找出它可能会抛出异常而不会出现编译错误?
【问题讨论】:
-
您更喜欢出现异常而不是编译错误?这与“快速失败”的重要原则相矛盾。编译错误比异常安全得多。
-
我相信我们需要编写“故障安全”代码。
-
故障安全代码使用的是编译错误而不是异常。您应该真正解决(或让您的库的用户)在编译期间而不是在运行时解决尽可能多的问题。
-
没有办法避免编译错误,无论如何你都应该在编程时得到它们,因为任何人都可能在编写时出错。但是编译错误比执行时间/逻辑错误更容易发现和修复。而且无论如何,如果你不先修复编译错误,就没有办法继续开发任何东西。
-
我发现检测函数/运算符是否存在/可调用的唯一正当理由是在编译时提供替代操作(或以任何方式做出决定) 。为运行时间延迟任何东西都是无稽之谈。
标签: c++ class overloading