c++ - 模板元编程和浮点常数系数

标签 c++ template-meta-programming

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

假设我想创建一个求解线性方程的方法:

y = a * x + b

一种方法是在运行时提供axb 作为参数。这是我想避免的。考虑一下虽然我知道 ab 然后我可以写这样的东西:

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

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

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

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

最佳答案

因为 floatdouble 类型不能作为模板参数,你不能通过模板参数设置你的系数,但你可以简单地硬编码值(value)观。

例如,这是行不通的:

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);

关于c++ - 模板元编程和浮点常数系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12240739/

相关文章:

c++ - 验证(使用 static_assert)元组类型遵循某种顺序(有状态编译时检查)

c++ - 静态 char* 的数组

c++ - 在 Windows 上调试 linux 故障转储

C++ 在编译时创建 BSTR/在编译时将长度插入字符串?

c++ - 通过枚举模板参数编译时间类模板选择

c++ - 将以二进制给出的两个整数相乘

c++ - 为什么我的二进制搜索没有返回要显示的名称?

c++ - 嵌套模板类中的 std::conditional

C++ - 模板 is_Pointer 似乎失败的奇怪情况

c++ - 可变模板别名作为模板参数(第 2 部分)