假设我想创建一个结构,将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>::type
来Convert
推导类型为Enum
?
我不知道Enum
的类型,因此Convert
应该能够任何枚举。我想避免使用宏。
答案 0 :(得分:2)
函数可以推导出模板参数;班级不能。这就是为什么std有像make_pair
这样的函数作为pair
类的补充。
您可以使用类似的策略。
例如,您可以声明模板Convert
函数,然后通过decltype(Convert<Enum::VALUE>())
提取其返回类型。