| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C/C++ 泛型模板约束 -> 正文阅读 |
|
[C++知识库]C/C++ 泛型模板约束 |
C/C++ 作为 C# 语言的前置版本,ECMA工业化编程语言,自然是存在 “泛型模板约束” 的功能的,只是本文不以 C/C++ 20 新语法搞出来的 “requires” 关键字来实现,它很难用。 CPP参考:(新标准) Constraints and concepts (since C++20) - cppreference.com 模板对于类型的约束: 约束 template_get_size 泛型T只允许接受类型:list<T>,其实为 C/C++ 泛型模板例化特性,但与泛型模板例化略微有些区别,因为是带泛型类型约束条件的特例化。
但,template_get_size<int> 仍然可以尝试编译,从语法层面没有问题,但会编译失败,原因:C/C++ 使用不完整的类型。 人们无法在编译期间来增加更多检查约束的有效性。 例一:
例二:
上述适用于泛型模板类/结构体,同理泛型模板函数仍可以增加泛型约束,只是没有办法向模板类型一样可以明确的约束T到底需要是什么类型,这取决于模板函数内部的实现,根代码粘合剂差不多,但不意味着不能精确限制那些T类型。 泛型模板类型例化:
例如:人们需要T是一个指针,那么有以下几种方法约束: 案例一:
案例二:
如果: 人们需要T是一个基类,那么这种似乎不需要模板来实现,如果是模板大约是这样的形式: 约束T必须是A类或其派生类型,但使用该模板函数的开放人员只有两个途径搞清楚T到底被约束为什么。 即:1、函数注释上明确T的约束类型,2、查看模板函数的内部实现,不像C#中明确为泛型模板类型 T 增加显示一致性的 where T 约束条件。
一个好的建议是: 每个泛型模板的类型约束都应在类型/函数注释上明确指出,这样使用模板的开发人员不需要尝试预编译代码或阅读模板代码实现来判定模板代码约束条件。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 12:51:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |