可变参数模板类扩展

时间:2018-07-10 13:47:13

标签: c++ templates

我有以下模板类,我想在其中遍历模板类型并对每种类型做些事情。这是一个简化的示例。

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'的模板参数”的编译错误。如果可能的话,应该在这里进行正确的扩展才能编译。

1 个答案:

答案 0 :(得分:0)

您使事情复杂化了。这应该做(没有双关语):

template<class... T>
class Handler
{
public:
    void Do(int a, int b) {
       int dummy[] = {(T{}.Process(a, b), 0)...};
    }
};

Demo