0

作成中の行列クラスの加算演算子と減算演算子をオーバーロードしています。int a = a + b;b が int 以外の型である場合のように、誰かが異なる次元の 2 つの行列を追加しようとした場合にエラーを表示する方法はありますか?直接エラーが発生します。クラス?そうでない場合、これを処理する可能な方法は何ですか?

4

2 に答える 2

0

これがテンプレートでない場合は、NO! コンパイル時エラーは、コンパイル時に検出できるものについてコンパイラによって識別されるため、実行時に行列の次元が識別される場合、コンパイラはそれについて何も知ることができず、例外などでエラーを識別する必要があります。ただし、行列の次元がテンプレート引数によって識別される場合、コンパイラはそれらを認識してコンパイル時にエラーを生成できますが、このアプローチを使用すると、実行時にユーザーから次元を取得できません。

于 2013-07-05T17:37:16.527 に答える
0

If the size of your matrix is set at compile time through, for example, non-type template parameters, then the striaghtforward template implementation of the oeprator would automatically detect and error on such mismatches.

If however the size of your matrix is set at runtime through the constructor or other means, it's probably not possible to detect at compile time (unless there is a lot of constexpr involved in the entire sizing call chain). The best you can do in this case is a runtime assertion that the sizes match.

于 2013-07-05T17:37:30.147 に答える