Witam, wpierw chciałbym podziękować tym którzy poświęcili czas aby pomoc mi w rozwiązaniu problemu.
Problem był pewnie niejednokrotnie tematem wielu rozmów, ale miałem problem w znalezieniu jednoznacznej odpowiedzi zatem postanowiłem napisać nowy wątek.
W "normalnym" przypadku, kiedy chcę użyć pointerów (bądź array) do funkcji robię to mniej więcej w ten sposób:
Przykład dla dwóch sortowań
//****************************************
// SelectSort
void SelectSort(int t[],int n){
int temp;
for(int i=0;i<n-1;i++){
temp=i;
for(int j=i+1;j<n;j++) if(t[j] < t[temp]) temp=j;
swap(t[temp],t[i]);}
return;}
//****************************************
// BubbleSort
void BubbleSort(int t[], int n){
for(int i=0; i<n-1; i++){
for(int j=n-1; j>=i+1; j--){
if(t[j] < t[j-1])
swap(t[j], t[j-1]);
}
}
return;
}
void callFunc(int *t, int n, void(*pWhichFunc)(void)){return pWhichFunc(t,x);}
void (*pFoo)(int*,int) = {&SelectSort, &BubbleSort}
Jak stworzyć taką tablicę dwu elementową (tablice pointerów) kiedy użyjemy template'a? Przykładowo, jak napisać poprawnie żądaną operację dla tych samych sortowań tylko w przypadku kiedy zastosowałem wspomnianego template'a:
//****************************************
// SelectSort
template <class T>
void SelectSort(T t[],int n){
T temp;
for(int i=0;i<n-1;i++){
temp=i;
for(int j=i+1;j<n;j++) if(t[j] < t[temp]) temp=j;
swap(t[temp],t[i]);}
return;}
//****************************************
// BubbleSort
template <class T>
void BubbleSort(T t[], int n){
for(int i=0; i<n-1; i++){
for(int j=n-1; j>=i+1; j--){
if(t[j] < t[j-1])
swap(t[j], t[j-1]);
}
}
return;
}
// array pointer here - but how to do this? ; (
Słyszałem, iż nie jest to takie proste, ponieważ w takim przypadku jest to pointer to function template, a nie template function.
Z góry dziękuję za wszelką pomoc.