在下面的示例中,我试图基本上别名模板参数包。键入别名模板参数包
这在标准中是不可能的,所以我发现人们用元组或空的模板结构来解决限制。但是我的情况似乎有所不同,因为我没有一个参数参数类型包匹配 ...
(我知道这个样品看起来很蠢,但它是一个最小的PoC,在代码库类型串变长了不少这真的很有用。)
#include <iostream>
#include <tuple>
template<typename T>
void f(T t)
{
std::cout << "templated f()" << std::endl;
}
template<>
void f(int t)
{
std::cout << "specialized f()" << std::endl;
}
template<typename A, typename B>
void fn()
{
f(A());
}
template<int, char>
void fn()
{
int a;
f(a);
}
// Can't seem to define this correctly.
//using MyType = std::tuple<int, char>()::type;
int
main(int, char**)
{
fn<char, char>();
// I have
fn<int, char>();
// I want some alias;
//fn<MyType>();
return 0;
}
参考文献;
- Is it possible to typedef a parameter pack?
- Using template parameter pack instead of macro
- Aliasing a template parameter pack
谢谢,这是一个很好的解决方案我只是不喜欢函子所需的接口,如果他们不是自由职守但是类成员。你有'object :: fn()'而不是'object.fn()'。 – dzan