我的问题是关于以下一段代码:
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/