我想知道在C ++模板元编程的世界中是否存在方法/技术,我可以替代硬编码浮点系数。为了更清楚,我将尝试举例:
考虑我想制作一个解决线性方程的方法:
y = a * x + b
一种方法是在运行时提供a
,x
,b
作为参数。这是我想避免的。考虑一下,虽然我知道a
和b
然后我可以写出类似的内容:
double linear(double x) {
return 2.0 * x + 3.0;
}
所以我知道a = 2.0
,b= 3.0
。我想要做的是从模板中提取a
和b
,因此它们在编译时就在那里,就像硬编码一样。一个示例方法可能看起来像(这是我想在我的代码中写的):
template <class coefs>
double linear(double x) {
return coefs::a * x + coefs::b;
}
这有可能吗?不确定我的问题是否足够清楚所以请告诉我是否需要改写。
答案 0 :(得分:3)
由于float
和double
类型不能作为模板参数,因此您无法通过模板参数设置系数,但您只需对值进行硬编码即可。
例如,这不起作用:
template<float a_in, float b_in>
struct coeff
{
static const float a = a_in;
static const float b = b_in;
};
linear<coeff<2.0, 3.0>>(4.0);
但这会:
struct coeff
{
static const float a = 2.0;
static const float b = 3.0;
};
linear<coeff>(4.0);