您只能创建类或函数模板。还没有变量模板这样的东西(尽管有人谈论做类似的事情)。一种解决方法是使用类模板来提供对数组的访问权限:
template <typename T>
struct func_ptr {
static void (*array[100])(std::vector<T>&, int, int, bool (*)(T, T);
};
template <typename T>
void (*func_ptr<T>::array[100])(std::vector<T>&, int, int, bool (*)(T, T);
这应该可行,但不是太可扩展。将数组包装到函数模板中并返回对数组的引用会更好:这种方式很容易获得数组的一个实例作为static
函数模板中的变量,需要在具有相同参数的不同实例之间合并。写出函数模板的返回类型有点尴尬:
template <typename T>
void (*(&funcPtrArray())[100])(std::vector<T>&, int, int, bool (*)(T, T))
{
static void (*array[100])(std::vector<T>&, int, int, bool (*)(T, T));
return array;
}
我想知道 C++11 是否有帮助,但它没有:
auto funcPtrArray() -> void (*(&)[100])(std::vector<T>&, int, int, bool (*)(T, T))
{
...
}
然后,您将使用该函数为您获取数组,例如:
std::vector<int> vec;
funcPtrArray<int>()[12](vec, 1, 1, [](int a, int b){ return a < b; });