fdl*_*dlm 4 c++ variadic-functions variadic-templates c++11
假设我有一个枚举,我希望每个枚举值与某个类型相关联.假设标准类型是double,如果我希望它是其他东西,我需要明确指定它.
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;
};
Run Code Online (Sandbox Code Playgroud)
然后,假设我有一些函数模板,我想根据与枚举值相关联的类型调用该函数:
template<typename T>
void foo() { /* do something */ }
template<A a>
void bar() {
foo< typename A_info<a>::type >();
}
Run Code Online (Sandbox Code Playgroud)
这很好用.现在假设,我有另一个功能,取决于可变参数模板列表,我想做类似上面的事情......
template<typename ... T>
void foo_multiple() { /* stuff */ }
template<A ... a>
void bar_multiple() {
foo_multiple< /* ??? */ > ();
}
Run Code Online (Sandbox Code Playgroud)
Q2:如何实现这个?无论如何,这可能吗?
只需使用所需的模式展开可变参数包:
template<A ... a>
void bar_multiple() {
foo_multiple<typename A_info<a>::type...> ();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
513 次 |
| 最近记录: |