可变参数模板类型特征分辨率
Variadic templates type traits resolution
>假设我有一个枚举,我希望每个枚举值都与某种类型相关联。假设标准类型是双精度类型,如果我希望它是其他类型,我需要明确指定它。
Q1:这是实现此类内容的首选方法吗?
enum A {
v1,
v2,
v3
};
// for every value of A, the standard type is double
template<A a>
struct A_info {
typedef double type;
};
// other types for certain values can be specified using specialization
template<>
struct A_info<v2> {
typedef size_t type;
};
然后,假设我有一些函数模板,我想根据与枚举值关联的类型调用该函数:
template<typename T>
void foo() { /* do something */ }
template<A a>
void bar() {
foo< typename A_info<a>::type >();
}
这工作正常。现在假设,我有另一个依赖于可变参数模板列表的功能,我想做一些类似于上面的事情......
template<typename ... T>
void foo_multiple() { /* stuff */ }
template<A ... a>
void bar_multiple() {
foo_multiple< /* ??? */ > ();
}
Q2:如何实现?这到底可能吗?
只需使用所需的模式扩展可变参数包:
template<A ... a>
void bar_multiple() {
foo_multiple<typename A_info<a>::type...> ();
}
相关文章:
- 根据C++标准的定义实现"is_similar"类型特征
- C++类型特征,以查看是否可以<uint32_t>对类型"K"的任何变量调用"static_cast(k)"
- C ++类型特征:确保子类实现方法
- 根据类型特征更改函数定义?
- 如何使用类型特征将函数的通用引用参数限制为 r 值引用?
- 在C++中创建新的类型特征
- 如何构造一个类型特征,可以判断一个类型的私有方法是否可以在另一个类型的构造函数中调用?
- std::begin-类型特征中未考虑用户定义的重载
- 在类型特征修改后,无法限定类型
- 使用类型特征的部分类专用化
- 为什么不调用预期的函数?我是否对类型特征的理解不正确?
- 了解类型特征的体系结构
- 为什么使用某些类型特征的模板类型会导致模板扣除失败
- 有了C++类型特征,有没有办法避免铸造
- 哪种类型特征表明该类型是可分配的?(元组,对)
- 一种类型特征,标识哪个类提供通过重载解析选择的函数
- 如何使用类型特征正确推断引用的参数
- 如何通过扩展以下类型特征来删除 decltype(&MyClass::funct) 部分?
- 从标准库类型特征继承
- 为什么类型特征不适用于命名空间范围内的类型?