我有以下模板类,我想在其中遍历模板类型并对每种类型做些事情。这是一个简化的示例。
template<class... T>
class Handler
{
private:
template<class A>
void Do1_(int a, int b)
{
A obj{};
obj.Process(a, b);
}
template<class A, class... B>
void Do_(int a, int b)
{
Do1_<A>(a, b);
Do_<B...>(a, b);
}
public:
void Do(int a, int b)
{
Do_<T...>(a, b);
}
};
struct Foo1 {
void Process(int a, int b) {}
};
struct Foo2 {
void Process(int a, int b) {}
};
class Bar : public Handler<Foo1, Foo2> {};
但是Do_<B...>
的扩展给我带来了麻烦,在编译Do_<B...>
时出现了有关“无法推断出'A'的模板参数”的编译错误。如果可能的话,应该在这里进行正确的扩展才能编译。
答案 0 :(得分:0)
您使事情复杂化了。这应该做(没有双关语):
template<class... T>
class Handler
{
public:
void Do(int a, int b) {
int dummy[] = {(T{}.Process(a, b), 0)...};
}
};