以下のテンプレートの関数を、
complex<double> c = u16todbm<complex<double> >(10, 32768.0, 0.0);
と呼ぶと問題なくコンパイルできますが、
complex<short> c = u16todbm<complex<short> >(10, 32768.0, 0.0);
に変更すると、*
や+
を使用している行で、
error: no match for ‘operator*’
error: no match for ‘operator+’
が発生してコンパイルが出来ません。
・呼ばれる側
template<typename samp_type>
samp_type u16todbm(samp_type a, double add, double mul)
{
// scale offset
a = a * mul;
a = a + add;
return a;
}
・呼ぶ側
int main(int argc, char* args[])
{
complex<short> c = u16todbm<complex<short> >(10, 32768.0, 0.0); // コンパイルエラー
complex<double> c = u16todbm<complex<double> >(10, 32768.0, 0.0); // コンパイル通る
}
complexとdoubleの*や+が定義されていないのか?と思いますが、実装方法がわかりません。
お教え願えないでしょうか。