нет соответствующей функции для вызова шаблона функции - PullRequest
3 голосов
/ 24 апреля 2011
template<class T, T i> void f(int[10][i]) { };

int main() {
   int a[10][30];
   f(a);
}

Почему f(a) терпит неудачу?

http://ideone.com/Rkc1Z

Ответы [ 3 ]

3 голосов
/ 24 апреля 2011

Попробуйте:

template<class T, T i> void f(T[10][i]) { }; // note the 'T'

int main() {
   int a[10][30];
   f(a);
}

.. это позволяет компилятору определить тип T, что совершенно невозможно в вашем примере (поскольку T вообще не используется).

http://ideone.com/gyQqI

3 голосов
/ 24 апреля 2011

f(a) терпит неудачу, потому что аргумент типа шаблона не может быть выведен из типа нетипичного аргумента.В этом случае компилятор не может определить тип параметра шаблона T.

Попробуйте вызвать его как f<int>(a);

1 голос
/ 24 апреля 2011
template< std::size_t N > void f(int (&arr)[10][N])
{
}

int main() {
   int a[10][30];
   f(a);
}

Это работает (http://codepad.org/iXeqanLJ)


Полезное описание: Разрешение перегрузки и массивы: какую функцию следует вызывать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...