如果我使用带有 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;
如果可能的话,我可以自己编写函数。
最佳答案
模板参数必须是常量表达式。因此,您的选项包括 #define
、enum
、const int
和 constexpr int
以及产生常量表达式的表达式/函数(特别是 constexpr
函数)。 constexpr int
是现代 C++ 的实现方式。
WIDTH/8
确实有效。
本质上它必须是一个编译时常量
关于c++ - C++ 模板中的自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57235715/