3

我想知道在 C++ 模板元编程的世界中是否有方法/技术可以替代硬编码的浮点系数。为了更清楚,我将尝试举一个例子:

考虑一下我想制作一种求解线性方程组的方法:

y = a * x + b

一种方法是在运行时提供,a作为参数。这是我想避免的。考虑一下我知道然后我可以写类似的东西:xbab

double linear(double x) {
    return 2.0 * x + 3.0;
}

所以我知道a = 2.0b= 3.0。我想做的是从模板中提取a和提取b,所以它们在编译时就在那里,就像被硬编码一样。一个示例方法可能看起来像(这是我想在我的代码中写的):

template <class coefs>
double linear(double x) {
    return coefs::a * x  +  coefs::b;
}

这有可能吗?也不确定我的问题是否足够清楚,所以如果我需要改写,请告诉我。

4

1 回答 1

3

由于floatdouble类型不能是模板参数,因此您不能通过模板参数设置系数,但您可以简单地对值进行硬编码。

例如,这将不起作用:

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);
于 2012-09-03T00:27:21.393 回答