Я пытаюсь изучить шаблоны на C ++, и одна из вещей, которые я пробовал, заключалась в кодировании функции карты, подобной тем, которые вы обычно найдете в функциональных языках.Идея была примерно такой:
template <class X> X * myMap(X * func(X), X * array, int size)
{
X * temp;
for(int i = 0, i < size, i++) {temp[i] = (*func)(array[i]);}
return temp;
}
Но когда я пытаюсь использовать это в:
int test(int k) { return 2 * k;}
int main(void)
{
int k[5] = {1,2,3,4,5};
int *q = new int[5];
q = myMap(&test, k, 5);
for(int i=0; i<5; i++) {cout << q[i];}
delete [] q;
return 0;
}
Я получаю ошибку несоответствия типов при компиляции:
main.cpp:25: error: no matching function for call to ‘myMap(int (*)(int), int [5], int)’
Я пытался изменить его на:
int main(void)
{
int *k = new int[5];
int *q = new int[5];
for(int i=0; i<5;i++) {k[i] = i;}
q = myMap(&test, k, 5);
for(int i=0; i<5; i++) {cout << q[i];}
delete [] q;
return 0;
}
Сообщение об ошибке меняется на:
main.cpp:26: error: no matching function for call to ‘myMap(int (*)(int), int*&, int)’
Это, вероятно, что-то очень неправильно, но я не могу найти где.
РЕДАКТИРОВАТЬ: ошибки, где: 1) я неправильно набрал указатель на функцию.Это X (* func) (X) вместо X * func (X).2) забыл выделить темп.Должен сделать X * temp = new X[size]
.3) есть ли еще ошибки?