在此代码示例中使用了哪种模板专门化
What kind of template specialization is used in this code sample?
我读过关于类模板的显式专门化和类模板的部分专门化的文档,但不明白在这个例子中使用了什么样的专门化(msdn链接只是由于我目前的环境而使用的,这个问题或多或少是理论上的)。我需要在c++标准和/或文档或引用c++标准段落的链接中使用的名称。我试图解决的问题非常复杂,无法直接提出,但我有一个想法,如何使用与本示例中使用的方法类似的方法。
template<class T>
struct is_vector {
static bool const value = false;
};
template<class T>
struct is_vector<std::vector<T>> {
static bool const value = true;
};
这定义了一个(主)类模板is_vector<T>
,然后为T = std::vector<U>
部分特化它。
一般规则相当简单:
主模板:template <something here> class someName /*no angle barckets here */ { ... }
部分专业化:template <something here> class someName<otherThing here> { ... }
明确专业化:
template <> class someName<something here> { ... }
没有短段的标准来引用,但你可以参考C++11[temp.class.spec]
分章。在那一章中没有任何内容将局部特化限制为指针和引用。请注意,您提供的MSDN链接也不限制其范围;示例前面有"such as",但这并不意味着没有其他可能性。
这是部分专门化。您的MSDN链接描述了两种类型的部分专门化,这是第二种:
- 模板有多种类型,其中只有一些需要专门化。结果是一个模板参数化其余的类型。
- 模板只有一种类型,但指针、引用、成员指针或函数指针类型需要特化。特化本身仍然是指向或引用的类型的模板。
为什么是局部的而不是显式的?因为专门化模板仍然没有完全指定所有类型参数。对于任意类型T的向量,将选择专门化版本。你可以进一步专门化它来处理std::vector
此外-您的MSDN链接显式专门化说"使用部分专门化…当你想要专门化一整组类型的行为时,比如所有的指针类型、引用类型或数组类型。"such as"的使用清楚地表明这个列表并不详尽。匹配向量
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- Clang拒绝类模板的嵌套类仅通过专门化定义的代码是正确的吗
- 如果模板的错误代码在If(false)中,我必须专门化模板吗
- 下面的模板专门化代码是非标准的,或者是vs - c++中的错误
- 避免c++(部分)模板专门化中的代码重复
- 在模板专门化中优化循环和避免代码重复
- 避免专门化模板中的代码重复
- 这个模板部分专门化代码有什么问题?
- 即使具有显式实例化,也不会为显式专门化模板生成代码
- 在此代码示例中使用了哪种模板专门化