【问题标题】:Confusion about Variadic Templates with Visual Studio 2010对可变参数模板与 Visual Studio 2010 的混淆
【发布时间】:2015-03-09 11:34:29
【问题描述】:

Visual C++ 2010 是否支持可变参数模板?

Here 声明:

Visual C++ 2010 不支持可变参数模板。

但是this forum entry 说:

是的,VS2010 TR1 支持可变长度模板参数。

还有 an example on MSDN 被明确列为 Visual C++ 2010。但是,当我尝试使用 Visual C++ 2010 构建它时,在“...”上出现语法错误 C2059:

template<class T1, class T2, ..., class TN>
class tuple { /* ... */ };

我错过了什么?除了 C++11 支持之外,我还需要打开一些编译器选项吗?

【问题讨论】:

  • 上面的 MSDN 示例代码不是可变参数模板。那里的... 表示typename 的“任意多,但预先确定”的序列。 C++11 可变参数模板声明类似于template &lt;typename First, typename... Rest&gt;,其中可变参数类型参数只能作为last 模板参数出现一次。虽然我没有使用过 VS2010 支持,但我无法具体评论它。
  • 我需要打开一些编译器选项吗?嗯,可变参数模板从 c++11 开始可用,所以你必须使用它进行编译
  • @Saran 我明白了。感谢您的澄清。这意味着论坛条目是错误的。有没有办法“绕过”不允许使用可变长度模板的限制?
  • @1nflktd 是的,当然,我忘了说我当然已经在这样做了。
  • @theV0ID 这是一个有效的 C++11 可变参数模板代码的快速示例。看VS2010喜不喜欢:coliru.stacked-crooked.com/a/44dd192a0b8a9516

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


【解决方案1】:

根据这两张表列出了在 Visual Studio 编译器上实现的 c++11 的特性,VC10 不支持可变参数模板:

msdn blog

C++11 核心语言特性

可变参数模板 v0.9,VC10 上的 v1.0 ?没有

VC11 上的可变参数模板 v0.9、v1.0 ?没有

Wiki apache

可变参数模板仅在 11.0 nov'12

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2016-04-20
    • 2013-02-09
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2013-01-26
    • 2019-09-23
    相关资源
    最近更新 更多