元々以下のコードのtypename _Tの部分は無く、size_tによって整数型を受け入れていました。小数型を含む色々な型も受け入れられるように変更しようとしたところ、問題が発生しました。
matrixは自作した行列を扱うクラスです。
c++
1template <typename _Ty, size_t _column, size_t _row , typename _T> 2const matrix<_Ty, _column, _row> operator *(_T i, matrix<_Ty, _column, _row> const& m); 3template <typename _Ty, size_t _column, size_t _row, typename _T> 4const matrix<_Ty, _column, _row> operator *( matrix<_Ty, _column, _row> const& m , _T i); 5template <typename _Ty, size_t _column, size_t _row_scolumn, size_t _srow> 6const matrix<_Ty, _column, _srow> operator *(matrix<_Ty, _column, _row_scolumn> const& f, matrix<_Ty, _row_scolumn, _srow> const& s);
このようにすると、matrixmatrixの計算を行おうとした時、いずれの三つも適用出来てしまい、コンパイルエラーになってしまいます。この問題の複雑なところは、matrixクラス自体にテンプレートが必要なため、テンプレートの特殊化ができないということです。
基本的には上二つを適用して、matrixmatrixの時だけ例外的に一番下のものが適用されるようにしたいのですが、どのようにすればいいでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。