繁体   English   中英

声明指向模板函数的指针数组会导致编译错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM