专业的编程技术博客社区

网站首页 > 博客文章 正文

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

baijin 2024-10-12 02:10:45 博客文章 12 ℃ 0 评论

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设计模式》是作者最近出版的新书,拜托多多关注!

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

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


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

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

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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表