我可以模板化模板值参数的类型吗?

Can I template the type of a template value parameter?

本文关键字:类型 值参 我可以 参数      更新时间:2023-10-16

假设我想创建一个结构,将枚举的值转换为元整数,例如boost::mpl::int_。我可以做这样的事情:

template <typename Enum, Enum value>
struct Convert
{
  using type = boost::mpl::int_<static_cast<int>(value)>;
};

这可以正常工作,但要调用它,我必须写Convert<Enum, Enum::VALUE>::type.是否可以编写一个类,所以我只需要编写Convert<Enum::VALUE>::type就可以Convert推断Enum的类型?

我不知道Enum的类型,所以Convert应该可以接受任何枚举。我想避免宏。

函数可以推导模板参数;类不能。这就是为什么 std 具有像 make_pair 这样的功能作为pair类的补充。

您可以使用类似的策略。

例如,您可以声明一个模板化的Convert函数,然后通过 decltype(Convert<Enum::VALUE>()) 提取其返回类型。