使用variadic模板作为类和方法的参数

时间:2013-07-23 17:44:31

标签: c++ templates c++11 variadic

我的问题是关于以下代码:

    template <class...T>
    class A
    {
    public:
        template <class...S>
        static void a() { }
    };

    template <class...T>
    class B
    {
    public:
        template <class...S>
        void b()
        {
            A<T...>::a<S...>();
        }
    };

    int main(int argc, char** argv)
    {
        return 0;
    }

我有一个类A,它有一个可变参数模板,并且包含一个具有另一个可变参数模板的静态方法a。从其他地方(本例中为B类)我有两组不同的可变参数模板,我想传递给A::a

编译器(GCC 4.8.1)给出以下错误消息:

    main.cpp: In static member function ‘static void B<T>::b()’:
    main.cpp:16:22: error: expected primary-expression before ‘...’ token
             A <T...>::a<S...>();
                          ^
    main.cpp:16:22: error: expected ‘;’ before ‘...’ token

另请注意,当我将方法b()更改为:

        void b()
        {
            A<int, char, short>::a<S...>();
        }

或A的模板的其他一些规范然后代码编译得很好。

上述代码有什么问题?

1 个答案:

答案 0 :(得分:6)

在此处添加模板

A<T...>::template a<S...>();

看到评论的原因。这也很好地在没有关键字的VC ++上编译,所以我猜它是依赖于编译器的。