c++ - 是否可以在解压缩列表后使用类型名称作为模板参数?

标签 c++ templates c++11 variadic-templates

从最基本的意义上讲,我想这样做:

template<typename ... Args>
struct{
    typedef std::tuple<Args ..., int> myTuple;
}

但是 MSVC(在 VisualStudio 2013 中)给了我一个非常奇怪的语法错误:

error C2143: syntax error : missing ';' before 'int'

是否可以在解压缩列表后使用常规类型名称作为模板参数?如果是,如何?如果没有,为什么不呢?

最佳答案

Is it possible to use a regular typename after an unpacked list as template arguments?

是的,绝对是。您可以在参数列表中的包扩展之前和之后插入参数,并且完全按照您显示的方式完成。这只是另一个例子,说明 VC++(或者在本例中,它是错误消息)在涉及模板和最近引入的功能时是多么无用。

通过使用在线编译器进行试验,我发现问题出在结构定义后缺少分号。出于某种原因,VC++ 产生的编译器错误指的是元组而不是结构的末尾。因此,检查是否缺少分号。

关于c++ - 是否可以在解压缩列表后使用类型名称作为模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26226328/

相关文章:

c++ - 从工厂返回指针

c++ - 不可复制 map 的 map 迭代器不支持相等运算符 (==)

c++ - 重载 (c)begin/(c)end

c++ - 在 Mac OS X 上使用 CGL 设置 OpenGL 上下文

c++ - g++:在涉及多个翻译单元的情况下RVO如何工作

c++ - Lambda 丢失捕获值

c++ - C++11 正则表达式是否适用于 UTF-8 字符串?

c++ - 递归变量模板

c++ - 模板容器迭代器

c++ - 如果一个类型 `T` 有一个 `template<> struct Writer<T>` 来序列化自己