There are several ways. You could let the compiler figure it out for you:
template<typename A0, typename A1, typename A2, typename A3, typename A4, typename F>
void sortArrayData(A0 a0[],
A1 a1[],
A2 a2[],
A3 a3[],
A4 a4[],
const int recordCount,
F indexFunc)
{
int indexOfNext;
for (int index = 0; index < recordCount - 1; index++) {
indexOfNext = indexFunc(a0, index, recordCount);
// ...
}
}
Or you could specify the signature directly either as a function or as a std::function.
template<typename A0, typename A1, typename A2, typename A3, typename A4>
void sortArrayData(A0 a0[],
A1 a1[],
A2 a2[],
A3 a3[],
A4 a4[],
const int recordCount,
std::function<int (A0, int, int)> indexFunc)
{
int indexOfNext;
for (int index = 0; index < recordCount - 1; index++) {
indexOfNext = indexFunc(a0, index, recordCount);
// ...
}
}
You can also declare a local variable for the function:
template<typename A0, typename A1, typename A2, typename A3, typename A4>
void sortArrayData(A0 a0[],
A1 a1[],
A2 a2[],
A3 a3[],
A4 a4[],
const int recordCount,
int order)
{
std::function<int (A0, int, int)> indexFunc = (order == 1) ? (indexOfSmallest) : (indexOfSmallest);
int indexOfNext;
for (int index = 0; index < recordCount - 1; index++) {
indexOfNext = indexFunc(a0, index, recordCount);
// ...
}
}