![]() |
1
7
C++ 2003,y7.174.3.1/1:“一个程序可以将任何标准库模板的模板特化添加到命名空间STD。标准库模板的专门化(完整或部分)导致未定义的行为,除非声明依赖于外部链接的用户定义的名称,除非专业化符合标准。原始模板的库要求。“
因此,您可以专门化库模板,
和
将您的专业化放在名称空间中
您在编辑的问题中使用的代码似乎是用户定义的名称的专门化,该名称(可能)具有外部链接,因此您不应该对这部分内容有任何问题。
这只剩下您的专业化满足原始模板要求的需求。对于您的类型,其中大部分都可能是无关紧要的。我能看到的唯一不明显的一点是,您似乎必须为整个模板提供专门化,而不仅仅是
其中相当一部分实际上是针对fp类型的,对于整数类型来说不需要有意义;我相信它们仍然需要实现。 |
![]() |
2
3
它使事情复杂化:
我理解你的沮丧,我经常希望得到同样的东西。这似乎是可能的,我当然不买逻辑分组的论点,但是我必须承认,这将需要更多的努力从编译器编写者,解析正确的C++已经是很困难的,因为它的立场。 如果你想要我的观点,模板在C++中有点凌乱,但是很容易用经验和使用20年来说明: |
![]() |
3
-4
为什么会出现这样的问题?如果不理解,甚至很难回答。 专门化修改主模板。它不能以任何方式与主模板“分离”。在某种程度上,作为一个高层次的概念,它仍然是相同的模板(即使在较低层次上,它被定义为一个独立的模板)。因此,出于明显的原因,它与主模板位于同一名称空间中。 对不起,我只是不能提供更好的解释,因为我不明白这样的问题是如何产生的。 顺便问一下,“在不同的名称空间”是什么意思?您想让专门化成为不同名称空间的成员吗?或者您希望在源代码的另一个名称空间中定义专门化,但仍然是原始名称空间的成员? |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |