繁体   English   中英

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

[英]Using variadic template as parameter for both class and method

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

    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模板的某些其他规范,则代码可以很好地编译。

上面的代码有什么问题?

在此处添加模板

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

见评论的原因。 而且,它可以在VC ++上很好地编译而无需使用关键字,因此我猜它与编译器有关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM