C++11 中的“类模板Example;”语句是什么意思?

2024-04-28

我已被提及“显式模板实例化” http://www.cplusplus.com/articles/1C75fSEw/ at cplusplus.com http://www.cplusplus.com,给出了以下示例:

template <typename T> class Example
{
public:
    Example( T test )
    {
        _data = test;
    }
    void setTest(T test)
    {
        _data = T;
    }
private:
    T _data;
};

class template Example<int>;
class template Example<float>;
class template Example<double>;

除了在我看来尝试将类型分配给成员变量的遗漏错误之外——_data = T而不是我认为应该的_data = test-- 我不明白的是最后 3 行到底声明或指示编译器做什么?

我知道什么是模板,用它们构建了程序,并且大致了解它们的实例化和专业化。我对后两者的理解可能确实存在一些漏洞,但我通常使用例如指示显式模板实例化template class Example<int>;形式而不是代码片段中显示的形式。

我尝试使用编译片段g++ -std=c++11 -pedantic它编译得很好并且没有警告(我更正了_date = T上面第一个错误)。

这是我评论之后出现的相关问题的答案 https://stackoverflow.com/a/14138629/254343我仍然不确定代码片段中的最后 3 行是否是模板专业化或实例化。

我还尝试找到相关的语法产生规则(一个允许template after class) 在里面ISO 发布的 C++11 草案 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf但空手而来。


从下面的神箭我们可以看出example https://godbolt.org/z/IXS6vv根据 clang 和 MSVC 的说法,这是格式不正确的,并查看了标准草案部分显式实例化部分[临时显式] http://eel.is/c++draft/temp.explicit我认为海湾合作委员会没有任何理由接受它。

我认为这篇文章“可能”的含义是:

template class Example<int>;
template class Example<float>;
template class Example<double>;

确实如此与 gcc/clang/MSVC 格式良好 https://godbolt.org/z/dOXtnt.

看起来 C++11 之前的语法是允许的,请参阅缺陷报告 1707:详细类型说明符中的模板没有嵌套名称说明符 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1707 (强调我的):

10.1.7.3 [dcl.type.elab] 中的详细类型说明符语法 部分读到,

elaborated-type-specifier:
    class-key nested-name-specifieropt templateopt simple-template-id

This 允许使用 template 关键字而无需 嵌套名称说明符,例如结构模板 S。这是 与 template 关键字的其他用法不一致。有可能 最好将生产一分为二并且只允许关键字 在嵌套名称说明符之后,

....

所以这更有意义有了这个评论 https://stackoverflow.com/questions/53030882/what-does-class-template-exampleint-statement-mean-with-c11#comment92966349_53032894 that -ansi引起警告。

另一个回答者提交了两份错误报告 https://stackoverflow.com/a/53046830/1708801.

参考参数对显式实例化有很好的讨论 https://en.cppreference.com/w/cpp/language/class_template和这个问题显式实例化——何时使用? https://stackoverflow.com/q/2351148/1708801详细解释了为什么这很有用。

另请注意,我们可以看到这一点元帖子:链接已更改为 cppreference.com https://meta.stackexchange.com/q/194788/213111已知该网站包含不正确的信息,并且一般来说社区更喜欢参考参数 https://en.cppreference.com/w/作为可靠的 C++ 参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++11 中的“类模板Example;”语句是什么意思? 的相关文章

随机推荐

  • softmax_cross_entropy_with_logits和loss.log_loss有什么区别?

    之间的主要区别是什么tf nn softmax cross entropy with logits and tf losses log loss 两种方法都接受 1 hot 标签和 logits 来计算分类任务的交叉熵损失 这些方法在理论上
  • 无需互联网的 Google Cast 应用

    仅在本地网络中无需访问互联网的情况下是否也可以在 Chromecast 上运行 Cast 应用程序 也许有自己的网络服务器 对于展示活动 我无法确保可以访问互联网 该用例仅用于演示 感谢您 截至 2015 年 2 月上旬 Chromecas
  • 使用 Angular HTTP Observable 的轮询 API

    在我的组件 html 中 我使用 asyncPipe 来订阅此 http 服务 该服务将 json 响应对象映射到类实例数组 这一切都很好 但我希望 http 服务每隔几秒轮询一次 我已经尝试了很多东西 比如间隔 但目前 RXJS 似乎有点
  • -Ot 标志在 Visual Studio 2017 中代表什么?

    我收到错误 错误 C1007 无法识别 p2 中的标志 Ot 但在项目的命令行字符串中找不到 Ot 谷歌搜索没有帮助 有谁知道那面旗帜代表什么吗 我在编译的一个项目中遇到了类似的问题 这似乎是当 MSVC 2017 链接器尝试将依赖库 li
  • 对 shell 变量中的单引号进行转义

    我编写了一个 Bash 脚本来将值插入到SQLite https en wikipedia org wiki SQLite数据库 命令如下 sqlite3 db name insert into table name column1 col
  • Pandas.read_csv() 列名称中带有特殊字符(重音符号)�

    我有一个csv包含一些带有列名称的数据的文件 时期 IAS brut IAS liss 发生率 哨兵 我对第三个有疑问 IAS liss 这是被误解的pd read csv 方法并返回为 那个角色是什么 因为它在我的烧瓶应用程序中生成错误
  • 如何链接 ndk 应用程序中的任何库

    From 本教程 http marakana com forums android examples 49 html 看到我有一个预构建的静态库 名为stackoverflow a它有stackoverflow h 现在我想使用该静态库的功
  • 同时使用 Vuetify 和 Vue-i18n 翻译

    我正在使用 Vuetify 想要添加我自己的按钮翻译 并使用 Vuetify 提供的翻译 我目前的 Vuetify 配置文件设置如下 import Vue from vue import Vuetify from vuetify impor
  • Python:Facebook Graph API - 使用 facebook-sdk 的分页请求

    我正在尝试向 Facebook 查询不同的信息 例如 好友列表 它工作得很好 但当然它只能给出有限数量的结果 如何获取下一批结果 import facebook import json ACCESS TOKEN def pp o with
  • 时间序列的线性回归Python(numpy或pandas)

    我对 python 和一般编程都很陌生 所以请原谅任何简单的错误 应该显而易见的事情 我想做的事情非常简单 我只想将线性趋势 一维多项式 拟合到一堆时间序列上 看看斜率是正还是负 现在我只是想让它在一个时间序列中工作 问题 pandas 和
  • 使用 select 操作 mathematica 中的列表

    我已将一些数据导入 Mathematica 中 数据将类似于 0 2 2 3 4 3 5 4 8 4 我想丢弃 x 值小于给定值的所有元素 或者创建一个包含 x 值大于该值的数据的新列表 我假设Select应该做这项工作 但我不知道怎么做
  • 文件是为不受支持的文件格式构建的?

    我在 OS X 上 当我尝试在终端中执行此命令时出现编译错误 g Wall o test E test E cppdynamic array cpp oracle o 我的其他 C 文件 例如test A cpp and test B cp
  • Java,ASM:如何从ASM InsnNode获取操作码名称和TagValue?

    我正在研究一些类文件分析 并且正在研究使用 ASM 来读取类 在 Javap 中 操作码以及 tagName 和 tagValue 是内联打印的 但在每个 AbstractInsnNode 中 我只看到 int 的字段 而不是 tagVal
  • 奇怪的 Rails 路由行为:两个 id 在嵌套资源中交换

    我在我的应用程序中设置了以下路由 表单属于一个站点 map resources sites do site site resources forms end 但是 当我尝试使用帮助程序 例如 edit site form path form
  • CSS中的继承是什么意思? [复制]

    这个问题在这里已经有答案了 我经常使用background inherit 像这样 许多其他 CSS 属性接受继承作为值 但有什么作用inherit意思是 它是如何工作的 inherit只是意味着样式将从元素的父元素继承 例如 jsFidd
  • Pulp.pulpTestAll() 测试失败,太多值无法解压

    我的操作系统是window 7 Pulp版本是1 6 1 gurobi版本是7 0 1 可以成功导入gurobipy Pull solvers GUROBI确实通过了测试 所以我可以使用gurobi 然而 pulp solvers CPLE
  • iOS 不同设备的单一尺寸类别中的不同字体大小

    在iOS 8中 我们可以为每个尺寸类别设计不同的UI布局 我面临的问题是 我设计了紧凑宽度和常规高度的布局 纵向所有 iPhone 的尺寸类别 但我想为 3 5 和 4 英寸设备 iPhone 4 和 5 保留较小的标签字体大小 然后对于
  • IntelliJ IDEA 的 Mylyn 替代品?

    我们公司已经使用 Unfuddle 一年了 我所有的同事都可以使用名为 Mylyn 的 Eclipse 插件轻松访问 Unfuddle 票证 IntelliJ IDEA 是否存在类似的东西 如果没有 你能建议一些替代方法来处理来自 IDEA
  • iPhone 开发——performSelector:withObject:afterDelay 还是 NSTimer?

    重复方法调用 或消息发送 我猜合适的术语是 x秒 是使用 NSTimer NSTimer 的 ScheduledTimerWithTimeInterval target selector userInfo repeats 还是让该方法在最后
  • C++11 中的“类模板Example;”语句是什么意思?

    我已被提及 显式模板实例化 http www cplusplus com articles 1C75fSEw at cplusplus com http www cplusplus com 给出了以下示例 template