Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++核心准则​T.84:使用非模板核心实现提供稳定的ABI接口

C++核心准则​T.84:使用非模板核心实现提供稳定的ABI接口

作者头像
面向对象思考
发布于 2020-09-28 08:38:03
发布于 2020-09-28 08:38:03
51900
代码可运行
举报
运行总次数:0
代码可运行

T.84: Use a non-template core implementation to provide an ABI-stable interface

T.84:使用非模板核心实现提供稳定的ABI接口

Reason(原因)

Improve stability of code. Avoid code bloat.

提高代码的稳定性。避免代码膨胀。

Example(示例)

It could be a base class:

它可以作为基类存在:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct Link_base {   // stable
    Link_base* suc;
    Link_base* pre;
};

template<typename T>   // templated wrapper to add type safety
struct Link : Link_base {
    T val;
};

struct List_base {
    Link_base* first;   // first element (if any)
    int sz;             // number of elements
    void add_front(Link_base* p);
    // ...
};

template<typename T>
class List : List_base {
public:
    void put_front(const T& e) { add_front(new Link<T>{e}); }   // implicit cast to Link_base
    T& front() { static_cast<Link<T>*>(first).val; }   // explicit cast back to Link<T>
    // ...
};

List<int> li;
List<string> ls;

Now there is only one copy of the operations linking and unlinking elements of a List. The Link and List classes do nothing but type manipulation.

(虽然例示了两个List类,)对于List的关联和非关联元素来讲,只有一套操作(函数)的拷贝。Link和List除了类型操作之外不做任何事。

Instead of using a separate "base" type, another common technique is to specialize for void or void* and have the general template for T be just the safely-encapsulated casts to and from the core void implementation.

除了使用独立的“基础”类型,另外一个通用技术是定义基于void和void*类型的核心实现并准备一个目的仅限于安全地封装从或到void核心实现进行转换的通用模板类。

Alternative: Use a Pimpl implementation.

其他选项:使用指向实现的指针技术来实现。

原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#t84-use-a-non-template-core-implementation-to-provide-an-abi-stable-interface

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 面向对象思考 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
mysql操作命令梳理(4)-中文乱码问题
在平时的mysql运维操作中,经常会碰到插入中文字段后出现乱码的情况,产生中文乱码的原因一般有: 1)mysql的编码格式不对,是latin1编码。强烈推荐将mysql下的编码格式都改为utf8,因为它兼容世界上所有字符! 2)mysql的表的语系设定问题(包含character与collation) 3)客户端程式(例如php)的连线语系设定问题
全栈程序员站长
2022/07/19
1.5K0
mysql命令行修改字符编码
1、修改数据库字符编码 mysql> alter database mydb character set utf8 ; 2、创建数据库时,指定数据库的字符编码 mysql> create database mydb character set utf8 ; 3、查看mysql数据库的字符编码 mysql> show variables like 'character%'; //查询当前mysql数据库的所有属性的字符编码 +--------------------------+---------------
程序员同行者
2018/06/22
3.7K0
彻底解决MySQL中文乱码
mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。
Java团长
2018/08/03
3.8K0
彻底解决mysql中文乱码
mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。
全栈程序员站长
2022/08/26
3.7K0
彻底解决mysql中文乱码
MySQL从删库到跑路(二)——MySQL字符集与乱码解析
字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。 字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。 字符编码(Character encoding)是把字符集中的某个字符编码为指定字符集中字符,以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成ASCII,ASCII将字母、数字和其它符号编号,并用7比特的二进制来表示。 字符序(collation)是指同一个字符集内字符之间的比较规则。只有确定字符序后,才能在一个字符集上定义什么是等价的字符,以及字符之间的大小关系。一个字符可以包含多种字符序。MySQL字符序命名规则是:以字符序对应的字符集名称开头,以国家名居中(或以general居中),以ci、cs、或bin结尾。以ci结尾的字符序表示大小写不敏感,以cs结尾的字符序表示大小写敏感,以bin结尾的字符序表示按二进制编码值比较。
良月柒
2019/03/19
9300
MySQL字符集utf8mb4
Unicode是编码字符集,而UTF-8就是字符编码,即Unicode规则字库的一种实现形式。随着互联网的发展,对同一字库集的要求越来越迫切,Unicode标准也就自然而然的出现。它几乎涵盖了各个国家语言可能出现的符号和文字,并将为他们编号。
HLee
2021/07/23
1.7K0
MySQL字符集utf8mb4
mysql用sql语句创建表和数据库设置字符编码
set character_set_client = gbk; -- 来自客户端的语句的字符集。服务器使用character_set_client变量作为客户端发送的查询中使用的字符集。
Sindsun
2019/12/11
11.7K0
MySQL中涉及的几个字符集
character-set-server/default-character-set:服务器字符集,默认情况下所采用的。 character-set-database:数据库字符集。 character-set-table:数据库表字符集。 优先级依次增加。所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集。 character-set-client:客户端的字符集。客户端默认字符集。当客户端向服务器发送请求时,请求以该字符集进行编码。 character-set-results:结果字符集。服务器向客户端返回结果或者信息时,结果以该字符集进行编码。 在客户端,如果没有定义character-set-results,则采用character-set-client字符集作为默认的字符集。所以只需要设置character-set-client字符集。
Java架构师必看
2021/05/20
1.5K0
从零开始学Mysql - 字符集和编码(下)
这个系列的文章是根据《MySQL是怎样运行的:从根儿上理解MySQL》这本书的个人笔记总结专栏,这里十分推荐大家精读一下这本书,也是目前市面上个人所知的讲述Mysql原理的为数不多的好书之一,好了废话不多说我们下面进入正题。
阿东
2022/03/30
2.4K0
从零开始学Mysql - 字符集和编码(下)
Ubuntu的MySQL中文乱码问题--自己躺坑
最近一段时间学习Django,在进行与MySQL数据联合使用的插入数据的时候遇到下边的问题:
静默加载
2020/05/29
7400
从零开始学Mysql - 字符集和编码(下)
这个系列的文章是根据《MySQL是怎样运行的:从根儿上理解MySQL》这本书的个人笔记总结专栏,这里十分推荐大家精读一下这本书,也是目前市面上个人所知的讲述Mysql原理的为数不多的好书之一,好了废话不多说我们下面进入正题。
阿东
2022/03/08
9720
MySQL 字符集
MySQL 支持多种字符集,使您能够使用各种字符集存储数据,并根据给定排序规则执行比较。
恋喵大鲤鱼
2023/10/12
1K0
MySql修改数据库编码为UTF8避免造成乱码问题--Java学习网
mysql 创建数据库时指定编码很重要,很多开发者都使用了默认编码,乱码问题可是防不胜防。制定数据库的编码可以很大程度上避免倒入导出带来的乱码问题。 网页数据一般采用UTF8编码,而数据库默认为latin 。我们可以通过修改数据库默认编码方式为UTF8来减少数据库创建时的设置,也能最大限度的避免因粗心造成的乱码问题。 我们遵循的标准是,数据库,表,字段和页面或文本的编码要统一起来 我们可以通过命令查看数据库当前编码:mysql> SHOW VARIABLES LIKE 'character%'; 发现很多对应的都是 latin1,我们的目标就是在下次使用此命令时latin1能被UTF8取代。 第一阶段: mysql设置编码命令
用户1289394
2021/07/09
1.8K0
网易MySQL微专业学习笔记(八)-MySQL字符集
这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL数据库对象与应用”中的MySQL数据类型相关笔记。
WindCoder
2018/09/19
5800
网易MySQL微专业学习笔记(八)-MySQL字符集
【问题解决】MySQL修改字符编码解决中文乱码问题
前言 什么是字符编码,为什么会乱码? https://zh.wikipedia.org/wiki/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81 mysql database字符编码默认是latin1,并不支持中文 本篇文章解决办法适用范围? Linux下的mysql 5.6+版本 其他版本未尝试过,不敢保证可行 解决步骤 查看mysql目前字符编码 #登录mysql mysql -u rrot -p #在mysql中查询字符编码设置 mysql> show variables
KenTalk
2018/09/11
1.5K0
MySQL字符集乱码总结
查看数据库编码: show create database db_name; 查看表编码: show create table tbl_name; 查看字段编码: show full columns from tbl_name; show full fields from tbl_name;
阳光岛主
2019/02/19
9.6K0
从零开始学Mysql - 字符集和编码(上)
从零开始学Mysql - 字符集和编码(上) 前言 上一节我们系统的阐述了关于系统配置的相关细节内容,而这一节我们需要了解关于字符集和编码的内容,字符集和编码的规则其实也算是入门mysql经常遇到的
阿东
2021/12/08
8660
从零开始学Mysql - 字符集和编码(上)
mysql设置utf8mb4字符编码
修改my.cnf文件。加入以下内容,然后重启数据库:systemctl restart mysqld
zhangdd
2020/01/02
1.7K0
MySQL数据库编码有关问题--Java学习网
在程序开发中,有时会被字符乱码的问题所困扰。对此,必须理解 MySQL 的字符集编码设置的原理:在MySQL中,默认使用的是lartin1,也就是ISO8859-1字符集编码。这是一种8位的编码,适用于所有西欧字符。而对于汉字等是不合适的。最好、最通用的编码格式是utf-8,UTF-8(8 位元 Universal Character Set/Unicode Transformation Format)是一种针对Unicode 的可变长度字节编码的Unicode字符集。它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。所以对于8位的西欧字符集来说,更能比较节省空间,而又能够有效地表示汉字等字符。MySQL服务器对字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和连接级。
用户1289394
2021/07/09
1.3K0
MySQL编码引发的两个问题 原
先讲一下写该文章的原因,首先,工作中又遇到一条很熟悉的MySQL报错信息 Cause: java.sql.SQLException: Incorrect string value:Cause: java.sql.SQLException: Incorrect string value… (emoji表情存储导致),原因是MySQL的字符集导致的;其次,因为一直听说数据库变更可能锁表,但是一直不知道到底哪些操作会导致锁表。所以今天对相关知识做一个系统的整理。
阿dai学长
2019/05/14
2.9K0
MySQL编码引发的两个问题
                                                                            原
推荐阅读
相关推荐
mysql操作命令梳理(4)-中文乱码问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验