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

时间:2015-02-11 23:53:16

标签: c++ enums

假设我想创建一个结构,将enum的值转换为meta int,例如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>::typeConvert 推导类型为Enum

我不知道Enum的类型,因此Convert应该能够任何枚举。我想避免使用宏。

1 个答案:

答案 0 :(得分:2)

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

您可以使用类似的策略。

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