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

标签 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 的模板的一些其他规范,然后代码编译得很好。

上面的代码有什么问题?

最佳答案

在此处添加模板

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

原因见评论。此外,这在没有关键字的 VC++ 上编译得很好,所以我猜它是依赖于编译器的。

关于c++ - 使用可变参数模板作为类和方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17817335/

相关文章:

c++ - 奇异矩阵的高斯消元

c++ - 如何在 C++ 中使用 while 循环读取文件?

c++ - 模板函数参数中的自动模板特化

c++ - boost 图形库 : Bundled Properties and iterating across edges

c++ - 现代 C++ 中对唯一指针的引用

c++ - 测量分支被错误预测的频率

c++ - OpenSSL:AES CCM 256 位大文件加密 block :这可能吗?

java - 修改IntelliJ中Java代码编辑器生成 `toString`方法使用的模板

c++ - 在 C++ 中获取排序 vector 中索引的有效方法

c++ - 在无法访问的语句中创建变量是否是明确定义的行为?