c++ - C++ 模板中的自定义函数

标签 c++ c++11 templates template-meta-programming vivado-hls

如果我使用带有 int 模板参数的 C++ 类,例如:

template<int width> class ap_uint { ... }

然后我明白我可以从这种类型的特定宽度创建特定的定义,例如:

typedef ap_uint<72> data_t;

但是,如果我想说定义一个常量并将其传入,我有什么选择(除了定义)?像这样说:

#define WIDTH 72
typedef ap_uint<WIDTH> data_t;
typedef ap_uint<WIDTH / 8> mask_t; // Does this even work?

此外,是否可以在模板参数选择中定义一个函数或使用现有函数?像这样:

#define SIZE 1024
typedef ap_uint<ceil(log(SIZE, 2))> addr_t;

如果可能的话,我可以自己编写函数。

最佳答案

模板参数必须是常量表达式。因此,您的选项包括 #defineenumconst intconstexpr int 以及产生常量表达式的表达式/函数(特别是 constexpr 函数)。 constexpr int 是现代 C++ 的实现方式。

WIDTH/8 确实有效。

本质上它必须是一个编译时常量

关于c++ - C++ 模板中的自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57235715/

相关文章:

c++ - Allegro pong 碰撞问题

c++ - 使用 GLU 在 C++ 中绘制四分之一圆

c++ - malloc 和放置 new vs. new

c++ - 从实际参数捕获函数参数类型

c++ - “Partial application” 模板参数

c++ - 枚举值 (int) 到类型的动态映射

C++条件模板编译基于数据类型

c++ - g++ 产生空目标文件

c++ - 使用STL对部分 vector 进行排序

c++,一个遍历树状结构的通用递归模板函数