数值常量作为容器中的类型或变量?

numerical constants as types or variables in a container?

我想知道是将数值常量作为 constexpr 变量还是 ::std::integral_constant<>?示例:

template <typename T>
struct container
{
  static constexpr ::std::size_t const size = 16;
};

template <typename T>
struct container
{
  using size = ::std::integral_constant<::std::size_t, 16>;
};

我更倾向于 ::std::integral_constant 方法,因为静态 constexpr 变量可能需要在 .cpp 文件中的某处定义。

我个人认为,最好的选择是老式的枚举。 constexpr 容易使用 ODR,而 integral_constant 键入太多(如果您在代码后面的某个地方需要它,您总是可以创建一个)。