【发布时间】:2018-05-30 09:12:57
【问题描述】:
在我的代码中,我使用如下内容:
enum {
foo = sizeof(some_type_t) < 32 ? 1 : 2,
bar = some_constexpr_function() - N,
baz = foo + bar,
// etc.
}
对于我想确保没有运行时存储的一堆编译时常量;我有一些使用这些常量的函数。 N 是我们从其他地方得到的一些常数。
现在我想将我的代码模板化:N 不再是一个全局常量,而是一个数字模板参数。现在,如果我这样做:
template <size_t N> f()
{
enum {
foo = sizeof(some_type_t) < 32 ? 1 : 2,
bar = some_constexpr_function() - N,
baz = foo + bar,
// etc.
}
}
那行得通;但是 - 它限制了我在单个函数中使用这些常量;我想要几个。在 C++ 中,我们不能拥有
template <size_t N>
enum {
foo = sizeof(some_type_t) < 32 ? 1 : 2,
bar = some_constexpr_function() - N,
baz = foo + bar,
// etc.
}
什么是实现这种模板化等效的优雅或惯用方式?
【问题讨论】:
-
你如何期望它与匿名枚举一起工作
-
我曾经做过一些similar stuff。
-
我真的不明白这里的枚举器有什么意义。只需定义普通常量。 “我不希望有任何运行时存储”这句话有点奇怪,因为如果您要将它们用于某些运行时计算,它们很可能会按值复制。
-
@Sopel:我不知道。这就是我问这个问题的原因。
标签: c++ templates enums idioms