какой тип шаблона использовать в MSVC / C ++: size_t или int - PullRequest
0 голосов
/ 02 мая 2020

MSV C кажется чувствительным к типу шаблона. У меня есть шаблонная функция

template<size_t size>
inline double squaredNormOfDiff(const Vec<size>& vec1, const Vec<size>& vec2){
  double sum=0;

  for(size_t i=0; i<size; i++) {
    const double diff = vec1[i] - vec2[i];
    sum += diff * diff;
  }
  return sum;
}

Когда я использую ее как

Vec<3> a, b;
squaredNormOfDiff(a,b);

Я получаю ошибку

no instance of function template "raisim::squaredNormOfDiff" matches the argument list

Но я изменяю шаблон на

template<int size>

вдруг это работает. Я использовал size_t для параметра шаблона в Linux. Как правильно сделать это в Windows? или для кроссплатформенного проекта?

Ve c определяется как

template <int Size>
using Vec = Mat<Size, 1>;

, а Mat определяется как

template<size_t n, size_t m>
class Mat : public MatExpr<Mat<n, m>> {
  union {
    std::aligned_storage<n*m*sizeof(ScalarType), 32> alignment_only;
    ScalarType v[n * m];
  };        
};

1 Ответ

0 голосов
/ 02 мая 2020

Возможно, вам потребуется изменить Ve c и повторить попытку:

template <size_t Size>   // change to size_t from int to match the definition of Mat
using Vec = Mat<Size, 1>;
...