C++核心准则T.24:使用标签类或特征区分只有语义不同的概念

Posted 大连木匠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++核心准则T.24:使用标签类或特征区分只有语义不同的概念相关的知识,希望对你有一定的参考价值。


T.24: Use tag classes or traits to differentiate concepts that differ only in semantics.

T.24:使用标签类或特征区分只有语义不同的概念

 

Reason(原因)

Two concepts requiring the same syntax but having different semantics leads to ambiguity unless the programmer differentiates them.

两个概念具有相同的语法需求但是语义不同会引起歧义,除非程序员可以区分它们。

 

Example (using TS concepts)(示例(使用TS概念))

template<typename I>    // iterator providing random access
concept bool RA_iter = ...;

template<typename I> // iterator providing random access to contiguous data
concept bool Contiguous_iter =
RA_iter<I> && is_contiguous<I>::value; // using is_contiguous trait

The programmer (in a library) must define is_contiguous (a trait) appropriately.

程序员(在库代码中)必须恰当地定义is_contiguous(特征)。

Wrapping a tag class into a concept leads to a simpler expression of this idea:

将一个标签类封入概念可以更简单地表现想法。

template<typename I> concept Contiguous = is_contiguous<I>::value;

template<typename I>
concept bool Contiguous_iter = RA_iter<I> && Contiguous<I>;

The programmer (in a library) must define is_contiguous (a trait) appropriately.

程序员(在库代码中)必须恰当地定义is_contiguous(特征)。

 

Note(注意)

Traits can be trait classes or type traits. These can be user-defined or standard-library ones. Prefer the standard-library ones.

特征的表达可以通过特征类和类型特征给你来实现。它们可以是用户定义的,也可以由标准库提供。标准库提供的方式更好。

 

Enforcement(实施建议)

  • The compiler flags ambiguous use of identical concepts.
  • 编译器应该标记想定义完全相同的概念的混乱用法。
  • Flag the definition of identical concepts.
  • 标记完全相同的概念定义。

 原文链接

​https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#t24-use-tag-classes-or-traits-to-differentiate-concepts-that-differ-only-in-semantics​


 

新书介绍

​《实战Python设计模式》​​是作者最近出版的新书,拜托多多关注!

C++核心准则T.24:使用标签类或特征区分只有语义不同的概念_语义

本书利用Python 的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。

 


 

觉得本文有帮助?请分享给更多人。

关注微信公众号【面向对象思考】轻松学习每一天!

面向对象开发,面向对象思考!

 

C++核心准则T.24:使用标签类或特征区分只有语义不同的概念_概念_02

 

以上是关于C++核心准则T.24:使用标签类或特征区分只有语义不同的概念的主要内容,如果未能解决你的问题,请参考以下文章

C++核心准则F.55 不要使用可变参数

c++的核心准则

c++的核心准则

C++核心准则边译边学-文档结构

C++核心准则边译边学-I.11 永远不要使用原始指针或引用传递所有权

C++核心准则F.54:不要隐式捕捉this指针