静态数据成员模板专业化的实例化点在哪里

2024-04-07

考虑下面的代码:

#include <iostream>
template<typename T>
struct Test{
    template<typename U>
    static U value;
};
template<typename T>
template<typename U>
U Test<T>::value = U{};
//#1
int main(){
    auto d = Test<int>::value<int>;
}
//#2

标准中的 [temp.point] 部分涵盖了实例化点应放置的大多数情况。但是我认为静态数据成员模板尚不清楚,因为:

温度点#1 https://timsong-cpp.github.io/cppwp/n4659/temp.point#1

对于函数模板专业化、成员函数模板专业化,或者类模板的成员函数或静态数据成员的特化,如果特化是隐式实例化的,因为它是从另一个模板特化内部引用的,并且引用它的上下文依赖于模板参数,则特化的实例化点就是封闭特化的实例化点。否则,此类专业化的实例化点紧跟在引用该专业化的命名空间范围声明或定义之后。

温度点#4 https://timsong-cpp.github.io/cppwp/n4659/temp.point#4

对于类模板专业化,类成员模板特化,或类模板的类成员的特化,如果特化是隐式实例化的,因为它是从另一个模板特化中引用的,如果引用特化的上下文依赖于模板参数,并且如果特化不是在封闭模板的实例化之前实例化,实例化点紧接在封闭模板的实例化点之前。否则,此类专门化的实例化点立即位于引用该专门化的名称空间范围声明或定义之前。

两段分别涵盖了他们提到的情况,他们是a specialization for static data member of a class template and a class member template specialization,所以,专业化为静态数据成员模板可以称为a specialization for static data member of a class template or a class member template specialization?我更愿意将其视为类成员模板特化,我的理由在第一段中已经提到了成员函数模板特化,这意味着如果 A 是X模板,它会称之为X模板专业化,但这只是我的推断。

在 [temp.static] 部分中,它意味着静态数据成员和静态数据成员模板统称为类或类模板的静态数据成员。

临时静态#1 https://timsong-cpp.github.io/cppwp/n4659/temp.static#1

静态数据成员或静态数据成员模板的定义可以在包含静态成员的类模板的定义的命名空间范围中提供。

[注意:静态数据成员模板的特化是静态数据成员。成员函数模板的特化是成员函数。成员类模板的特化是嵌套类。 —— 尾注]

现在,措辞使问题更加不清楚。那么根据上面的规则, 实例化点就是Test<int>::value<int> is at #2 or #1?

如果 POI 为Test<int>::value<int> is at #2,那么它将被视为a specialization for static data member of a class template,否则如果它位于#1,那么它将被视为a class member template specialization,我不知道哪个立场是正确的。如果我遗漏了什么,请纠正我。


您可能会混淆实例化/专业化

template<typename T>
template<typename U>
U Test< T >::value = 88;  // <- this is not specialization 

template<>
template<>
int Test< int >::value<int> = 98;  // <- this is specialization

运行这段代码https://godbolt.org/z/h434eG https://godbolt.org/z/h434eG,查看输出中数字的顺序,然后取消注释该块并再次运行。

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

静态数据成员模板专业化的实例化点在哪里 的相关文章

  • 在 C# 中转换 VbScript 函数(Right、Len、IsNumeric、CInt)

    同样 我在 VbScript 中得到了以下代码 您能建议一下 C 中的等效代码吗 Function GetNavID Title getNavID UCase Left Title InStr Title 1 End Function 我已
  • Excel的解析路径

    其实我想问以下问题 对于位于 目录中定义的 PATH 怎么能 我找出这些目录中的哪个 找到了 因为我需要使用 Process Run 从 C 运行 Excel 并且只需指示 Excel 即可正常工作 Windows 似乎知道在哪里可以找到它
  • 在单个 C# 泛型方法中返回可为 null 和 null?

    C 泛型方法是否可以返回对象类型或 Nullable 类型 例如 如果我有一个安全的索引访问器List我想返回一个值 稍后我可以使用以下任一方法检查该值 null or HasValue 目前我有以下两种方法 static T SafeGe
  • C++11 中具有 C 链接的复杂类型

    我需要将 C 库的标头包含到我的 C 11 代码中 现在 标头提供了涉及大量的例程和数据结构double complex到处都是 例如 include
  • 枚举 EMF 时丢失文本

    我在列举发票 emf http www mediafire com kdjwvvo7odyvwa6并将其复制到另一个但文本丢失了 令人惊讶的是 当我将其输出到窗口时 它绘制得非常完美 int CALLBACK EnhMetaFileProc
  • 使用 strcpy 从整数生成指针,无需进行强制转换

    我不明白我做错了什么 我正在学习 C 很抱歉 如果这显然是错误的 但我正在尝试使用uthash http uthash sourceforge net 制作股票及其价格的哈希图 但是当我将股票添加到哈希映射时 我收到上述错误 我所做的就是从
  • 在 PHP 扩展中,推荐从 std::string 返回值的方法

    我们有一个简单的 PHP 函数 其目的是调用 C 自由函数std string callLibrary std string 并返回其std string返回值 目前看起来是这样的 PHP FUNCTION call library cha
  • 如何正确实现带有 close 方法的处置模式(CA1063)

    框架设计指南 第二版 第 327 页 说 考虑提供方法Close 除了Dispose 如果接近 是该领域的标准术语 这样做时 重要的是使 Close 实现与Dispose并考虑实施IDisposable Dispose方法明确 因此 按照提
  • 会员提供商使用还是不使用?

    我正在开发一个使用 Facebook 的网站 现在为了管理用户我想使用MembershipProvider并选择开发一个定制的会员提供商 我的问题是我的数据库架构与标准成员资格架构不匹配 并且提供的用于覆盖的函数采用与我预期不同的参数 例如
  • DataGridView小数不排序

    好吧 我有一个 DataGridView 它的数据绑定如下 dataGridViewChartOre AutoGenerateColumns false dataGridViewChartOre DataSource xml GetOreC
  • C# While 循环与 For 循环?

    在 C 中 一个问题已经困扰我一段时间了 它的 While 和 For 循环之间的实际主要区别是什么 它只是纯粹的可读性吗 在 for 循环中本质上可以做的所有事情都可以在 while 循环中完成 只是在不同的地方 举这些例子 int nu
  • 使用 OpenSSL 库在 C++ 中生成 SHA 哈希值

    如何使用以下命令生成 SHA1 或 SHA2 哈希值OpenSSL https openssl org图书馆 我搜索了谷歌 找不到任何函数或示例代码 从命令行来看 很简单 printf compute sha1 openssl sha1 您
  • OpenMP 和 C++:this 指针

    Is thisOpenMP 中始终共享指针 尽管编译器不会抱怨以下代码default none pragma omp parallel for default none shared n for SInt i 0 i lt n i f i
  • vs2010 c++ 通过debug查看指针内容

    我正在使用 Vs2010 c 处理 2D 数组 我从一维指针开始 并使用操作 如下 class CMatrix void clear public int nRows int nCols short MyMat CMatrix CMatri
  • 为什么.net中的数组只实现IEnumerable而不实现IEnumerable

    我正在实现自己的 ArrayList 类 当我意识到这一点时 我感到很惊讶 public System Collections Generic IEnumerator
  • 随机排列

    我无法找到一种随机洗牌元素的好方法std vector经过一些操作后 恢复原来的顺序 我知道这应该是一个相当简单的算法 但我想我太累了 由于我被迫使用自定义随机数生成器类 我想我不能使用std random shuffle 无论如何这没有帮
  • 通过开源 PCL 使用 API 查看 3D 点云

    我使用 ToF 飞行时间 相机来获取 XYZ 格式的深度数据 为了实现 3D 点云的可视化目的 我想使用开源 PCL 提供的 API 网址为http pointclouds org documentation tutorials pcl v
  • 如何重写(重新实现)QFileSystemModel 中的成员函数

    我已经为此苦苦挣扎了一段时间 Qt s QFileSystemModel由于图标获取算法非常糟糕 在获取数百个文件时速度非常慢 我想完全禁用图标 它们被提取到QFileSystemModel data方法不是虚拟的 QFileSystemM
  • 如何将 IDispatch* 放入托管代码中

    我一直在考虑尝试使用 C 编写一个实现 OPOS 服务对象的 COM 对象 我已经使用自动化和 MFC 在 C 中完成了它 这并不太困难 所以我坚持尝试将其转换为一种方法 我将排除界面中的其他方法 因为它们很简单 或者我希望如此 id 6
  • 创建进程的多个子进程并维护所有 PID 的共享数组

    我已经分叉了几次 并用 C 创建了一堆子进程 我想将它们所有的 PID 存储在一个共享数组中 PID 的顺序并不重要 例如 我创建了 32 个进程 我想要一个 32 个整数长的数组来存储每个 PID 并且每个进程都可以访问 最好的方法是什么

随机推荐

  • 使用用户窗体中的数据将值从一张纸复制到另一张纸

    我有一个用户表单 其中包含您可以填写的以下值 TextBoxLopnummer Value TextBoxFragestallare Value TextBoxMottagare Value TextBoxDatum Value Pictu
  • 在 do while 循环内检查多个 checkbox.checked 状态

    我在上一个问题中问过如何 线程化 2 个表单以同时使用 C https stackoverflow com questions 40450905 threading 2 forms to use simultaneously c sharp
  • -1 是一个神奇的数字吗?反模式?代码味道?当局的引述和指南[重复]

    这个问题在这里已经有答案了 可能的重复 不断的虐待 https stackoverflow com questions 1862593 constant abuse 我见过 1用于各种 API 最常用于搜索具有从零开始的索引的 集合 时 通
  • 从 Rails 3 升级后不允许使用 Rails 4 方法

    我有一个现有的代码库 我正在尝试将其从 Rails 3 2 升级到 Rails 4 0 我有一个名为 asset controller 的控制器 带有 create 方法 并且我的路由文件中有一个条目 resources assets 在前
  • 如何创建一个接受任何类型变量的 Java 函数?

    我想创建一个可以接受任何传入变量的函数 无论类型如何 int double String或其他对象 然后可能确定变量的类型并对该类型进行有条件的操作 我怎样才能做到这一点 重载是最推荐的选项 大多数时候您不需要接受任何类型变量的函数 但是如
  • 为什么ssd和yolo没有roi池化层?

    我们知道目标检测框架像faster rcnn and mask rcnn has an roi pooling layer or roi align layer 但是为什么ssd和yolo框架没有这样的层呢 首先我们要明白这样做的目的是什么
  • @font-face 和 .ttf 文件出现问题

    我正在尝试使用 font face 来实现我在线下载的字体 http www losttype com font name blanch http www losttype com font name blanch 并且我在让它在任何浏览器
  • 保存 ember 数据模型后的转换

    我想在创建帖子后进行转换 post new gt 单击提交 gt Rails 后端成功创建帖子并响应 json gt 重定向到新创建帖子的路径 在 ember data example github 源代码中 他们使用这种方法 transi
  • Grails JSONBuilder

    如果我有一个简单的对象 例如 class Person String name Integer age 我可以使用 JSONBuilder 轻松地将其用户定义的属性呈现为 JSON def person new Person name bo
  • Rails 在模型中验证值在数组内

    我有一个表格 我可以在其中传递一个字段命名 type我想要检查它的值是否在允许类型的数组内以便任何人不得发布不允许的类型 数组看起来像 allowed types type1 type2 type3 type4 type5 type6 ty
  • 异步顺序调用方法

    我有一个在方法中调用的方法列表 如下所示 this doOneThing someOtherObject doASecondThing this doSomethingElse 当这是同步时 它们会一个接一个地执行 这是必需的 但现在我有
  • WPF 数据绑定:根据 var 的内容启用/禁用控件?

    我的表单上有一个按钮 仅当在树视图 或选项卡项中的列表视图 中选择一个项目时才应启用该按钮 当选择一个项目时 它的值将存储在字符串成员变量中 我可以绑定吗IsEnabled按钮的属性到成员变量的内容 也就是说 如果成员变量不为空 则启用该按
  • 杀死一个线程

    我正在处理的项目中有以下代码片段 public void Start Thread t new Thread NotifyIfNecessary Threads Add t t Start t Abort 我想要的是线程 t 应该执行方法
  • 带参数名称和冒号的 C# 方法调用

    我有时开始注意到 当我在 C 中进行方法调用时 我调用的方法的参数名称将显示在附加冒号的智能感知列表中 然后我可以格式化该方法如此称呼 MethodCall parameter1 value1 parameter2 value2 这是新的语
  • 样板代码替换 - 这段代码有什么不好的地方吗?

    我最近创建了这两个 不相关的 方法来替换我的 winforms 应用程序中的大量样板代码 据我所知 它们工作正常 但我需要一些保证 建议来确定是否存在我可能遗漏的一些问题 从记忆里 static class SafeInvoker Util
  • 根据 GPS 坐标计算平均速度的最佳实践

    我这里有一个可以给我 GPS 坐标的设备 我可以定义的时间间隔 我想用它来计算驾驶或驾车旅行时的平均速度 实际上 我使用了正交公式来计算两点之间的距离 然后将其除以给定的时间间隔 通过我遵循的实施这个词 http de wikipedia
  • 在Webpack中通过代码将nonce设置为样式标签

    因为我想启用内容安全策略 CSP noncestyle 属性 所以我需要设置nonce通过代码动态调整样式 网页包设置 devServer contentBase dist watchContentBase true headers Con
  • 为什么我的 mongodb 集合会自动删除?

    我在三个 EC2 实例中有一个 MongoDB 客户端 并且创建了一个副本集 上次我遇到了空间问题约束 https askubuntu com questions 864631 amazon ec2 instance ubuntu 16 0
  • 核心数据实体中布尔属性的类型是什么?

    我以编程方式使用核心数据 即不使用 xcdatamodel数据模型文件 其方式与 Apple 中描述的方式大致相同核心数据实用程序教程 http developer apple com documentation Cocoa Concept
  • 静态数据成员模板专业化的实例化点在哪里

    考虑下面的代码 include