C++相談室 part29
■ このスレッドは過去ログ倉庫に格納されています
0049デフォルトの名無しさん
NGNGoperator*をtemplateとして定義しようとしていますね?
VC++7.1での一つの解決法は,operator*のtemplateの前方宣言を入れることです.
ただ,その前にさらにMatrixの前方宣言を入れる必要がありますがw
template<typename X> class Matrix;
template<typename X> Matrix<X> operator*(Matrix<X> const &, Matrix<X> const &);
template< typename X > class Matrix{
//定義
};
もう一つのやり方はfriend関数の定義をclassスコープ内に書いてしまう,
いわゆるBarton-Nackman trickを使うことです.
template<typename X> class Matrix{
...
friend Matrix<X> operator*(Matrix<X> const & lhs, Matrix<X> const & rhs){
return Multiply(lhs, rhs); //他へ委譲する
}
};
>>48
一見それでよさそうなんですが,関数templateに対してそうやると面食らう結果になりますよ.
(理由を説明すると長いんですが・・・)
■ このスレッドは過去ログ倉庫に格納されています