【发布时间】:2018-03-02 02:55:43
【问题描述】:
我正在编写一个具有重复调用函数的类,并决定将其实现为将函数作为模板参数。 作为我正在谈论的具体示例,请考虑以下类:
#include <array>
template<double (*func)(std::array<double,3>)>
class MyClass
{
public:
MyClass()
{
std::array<double,3> v {{0.1,0.2,0.1}};
func(v);
}
};
然后可以用函数实例化,例如:
double func(std::array<double,3> x)
{
return x[0]*x[0]+x[1];
}
int main()
{
MyClass<func> entity;
}
但是,我需要函数可以用不同的类型调用(函数中的操作当然适用于所有类型),即我希望将这个函数模板化,如下所示:
template<typename scalartype, typename vectype>
scalartype func1(vectype x)
{
scalartype res = x[0]*x[0]+x[1];
return res;
}
我仍然可以使用它作为模板参数,但是函数参数和返回类型在类中是固定的。那么我怎样才能在类中使用作为模板函数的函数呢?例如,我可以用四个整数的std::vector 调用它并返回一个整数。
我尝试使用模板模板参数,但我什至不知道如何将两个模板参数与它们一起使用(因为它们似乎只允许模板...语法)。如果表述不清楚,对不起,我还是新手。
【问题讨论】: