我可以模板化模板值参数的类型吗?
Can I template the type of a template value parameter?
假设我想创建一个结构,将枚举的值转换为元整数,例如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>())
提取其返回类型。
相关文章:
- 检查函数返回类型是否与STL容器类型值相同
- boost 是否有按特殊类型值编码状态"compact optional"?
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- 类型名称 T::类型::值中的预期非限定 id
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 在一行中将默认类型值上的指针作为参数传递
- 为什么乘法与C++双精度类型值的加法一样快?
- 模板参数列表中参数 3 处的类型/值不匹配
- 我预测char数组类型值只能投射指针类型
- 模板-模板参数给出神秘的类型/值不匹配
- 为什么q_enum在没有qregistermetatepe的情况下无法获得正确的类型值
- 类型值不能用于初始化类型实体
- 类模板方法的专用化,类型名称是类模板 - 错误:参数处的类型/值不匹配
- C++ 可变参数模板和模板模板参数:错误:模板参数列表中参数 1 处的类型/值不匹配
- 用于存储多种类型值的 STL 容器
- 如何在尝试为某些非类型值实例化模板子类方法时产生编译器错误
- 穿越拥有两种类型值的BST
- C++字符类型值由OS定义
- 使用函数返回值作为默认模板非类型形参