![](/img/trans.png)
[英]c++ member function pointer in struct in array gives compilation error
[英]Declaring Array of pointer to template functions gives compilation error
我试图将一堆模板化函数指针存储在数组中以实现函数指针。
我试过了
template<typename T>
void (*funcptrArray[100])(typename vector<T> &a,int,int,bool (*comp)(T,T));
它在g ++中给出了编译错误
**模板之前的预期主要表达式错误**
编辑:我要在这里实现的是:给定10个不同的算法(模板化的函数),用于同一任务。我想在数组中存储不同的实例化,以便我可以循环迭代并逐个运行它们
您只能创建类或函数模板。 还没有变量模板之类的东西(尽管有人在谈论做类似的事情)。 一种解决方法是改为使用提供对数组的访问的类模板:
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; });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.