То, что я хотел бы сделать, это просто вычислить ошибку между двумя векторами, но входные векторы могут содержать сложные или действительные числа. Пока у меня есть решение.
template<typename T1, typename T2>
T1 computeError(const std::vector<T1> & in1,
const std::vector<T2> & in2)
{
int size = in1.size();
T1 error = 0;
for(int i = 0; i < size; i++) {
error += std::abs(in1[i]- in2[i]);
}
return error;
};
template<typename T1, typename T2>
T1 computeError(const std::vector<complex<T1> > & in1,
const std::vector<complex<T2> > & in2)
{
int size = in1.size();
T1 error = 0;
for(int i = 0; i < size; i++) {
error += std::abs(in1[i] - in2[i]);
}
return error;
};
Поэтому в основном я реализовал две функции. Но они очень похожи друг на друга. Мне интересно, есть ли способ реализовать только одну функцию, охватывающую оба случая.
благодаря
Следующий код должен работать с С++ 11
template<typename T1, typename T2>
std::conditional<is_class<T1>, T1:value_type, T1> computeError(const std::vector<T1> & in1,
const std::vector<T2> & in2)
{
int size = in1.size();
typename std::conditional<is_class<T1>, T1:value_type, T1> error = 0;
for(int i = 0; i < size; i++) {
error += std::abs(in1[i]- in2[i]);
}
return error;
};