【问题标题】:Operator Overloading to show error on invalid input运算符重载以显示无效输入错误
【发布时间】:2013-07-03 20:50:44
【问题描述】:

我正在为我正在编写的矩阵类重载加法和减法运算符。如果有人试图添加两个不同维度的矩阵,我有没有办法显示错误,比如如果你尝试int a = a + b;,其中 b 的类型不是 int,它会直接给我错误,有没有办法做这是我的课吗?如果没有,有什么可能的方法来处理这个问题?

【问题讨论】:

  • 当然有。它们是模板参数吗?会员? SSCCE 会有很长的路要走。
  • 目前,我在做一个int矩阵类,等我做完了,我就改成一个模板类

标签: c++ matrix error-handling operator-overloading


【解决方案1】:

如果这不是模板,NO! 编译时错误将由编译器识别它可以在编译时检测到的内容,因此如果矩阵的维度将在运行时识别,编译器对此一无所知,您必须通过异常或类似的东西识别错误。但是如果矩阵的维度将由模板参数识别,编译器可以知道它们并在编译时生成错误,但是使用这种方法你不能在运行时从用户那里获取维度。

【讨论】:

    【解决方案2】:

    如果您的矩阵大小是在编译时通过例如非类型模板参数设置的,那么操作符的简单模板实现将自动检测此类不匹配并出错。

    但是,如果您的矩阵的大小是在运行时通过构造函数或其他方式设置的,则可能无法在编译时检测到(除非整个调整调用链中涉及很多 constexpr)。在这种情况下,您可以做的最好的事情是大小匹配的运行时断言。

    【讨论】:

      猜你喜欢
      • 2015-01-17
      • 2013-12-15
      • 2012-12-30
      • 1970-01-01
      • 2016-01-17
      • 2013-11-14
      • 2016-10-18
      • 1970-01-01
      相关资源
      最近更新 更多