如何做一个函数指针指向以模板为参数的函数? 我试图做一个指向该函数C++函数指针函数,需要模板作为参数
template<typename BaseType>
int indexOfLargest(const BaseType list[], int startIndex, int endIndex) {
if (startIndex < 0 || startIndex > endIndex)
return -1;
int indexOfMax = startIndex;
for (int index = startIndex + 1; index < endIndex; index++)
if (list[index] > list[indexOfMax])
indexOfMax = index;
return indexOfMax;
}
这个功能
template<typename BaseType>
int indexOfSmallest(const BaseType list[], int startIndex, int endIndex) {
if (startIndex < 0 || startIndex > endIndex)
return -1;
int indexOfMin = startIndex;
for (int index = startIndex + 1; index < endIndex; index++)
if (list[index] < list[indexOfMin])
indexOfMin = index;
return indexOfMin;
}
所以我能避免在每次迭代做一个if语句。
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) {
int indexOfNext;
for (int index = 0; index < recordCount - 1; index++) {
if (order == 1)
indexOfNext = indexOfSmallest(a0, index, recordCount);
else
indexOfNext = indexOfLargest(a0, index, recordCount);
swap_v(a0[index], a0[indexOfNext]);
swap_v(a1[index], a1[indexOfNext]);
swap_v(a2[index], a2[indexOfNext]);
swap_v(a3[index], a3[indexOfNext]);
swap_v(a4[index], a4[indexOfNext]);
}
}
- 另外我无法找到这个网上或老乡程序员任何答案。
谢谢
是否有可能在函数中声明它? – zeitue
用本地函数变量添加第三个示例。虽然我认为这不会是一个巨大的性能提升,因为它对分支有着间接的影响。处理器在预测分支方面非常出色,所以我建议对其进行配置。 – Jens
那么所有这一切都适用于C++ 11,但不适用于较旧的东西 – zeitue