Скорее всего это хорошо обсуждаемая проблема, но я просто не знаю, как правильно ее погуглить. У меня есть функция шаблона для двух спецификаций: указатель на int и vector из int s. В этой функции у меня есть параметр N , который является длиной массива int s. Если я использую vector , я хочу проверить, совпадает ли N с x.size () , поэтому мой код выглядит примерно так:
// foo.cpp
#include "foo.h"
template void foo<int *>(int *, int);
template void foo<std::vector<int>&>(std::vector<int>&>,int);
template <class T>
void foo(T x, int N){
if ( std::is_same<T, std::vector<int>&>::value && N!=x.size() ) {
// do something
}
}
//foo.h
template <class T>
void foo(T x, int N);
Проблема здесь в том, что не существует метода size () для массива int s. Я сделал оператор if с оператором AND таким образом, чтобы вторая часть не вызывалась, если первая не удалась, и у меня была надежда, что компилятор мог догадаться об этом, но он все равно не скомпилировался.
Есть ли простое решение для этого? Я не хочу создавать новую функцию специально для типа vector , поскольку она полностью устраняет все причины использования шаблонов.