C++核心准则T.20:避免定义没有明确语义的“概念”

网友投稿 572 2022-10-12

C++核心准则T.20:避免定义没有明确语义的“概念”

C++核心准则T.20:避免定义没有明确语义的“概念”

T.20: Avoid "concepts" without meaningful semantics

T.20:避免定义没有明确语义的“概念”

Reason(原因)

Concepts are meant to express semantic notions, such as "a number", "a range" of elements, and "totally ordered." Simple constraints, such as "has a + operator" and "has a > operator" cannot be meaningfully specified in isolation and should be used only as building blocks for meaningful concepts, rather than in user code.

概念意在表现某种有语义的观念,例如“数字”,元素的“范围”,和“完全有序”等。简单的约束,例如有+运算符,有>运算符不能算作被独立,明确地定义,只应用于某个明确概念的组成部分,而不是在代码中直接使用。

Example, bad (using TS concepts)

反面示例(使用TS概念)

templateconcept Addable = has_plus; // bad; insufficienttemplate auto algo(const N& a, const N& b) // use two numbers{ // ... return a + b;}int x = 7;int y = 9;auto z = algo(x, y); // z = 16string xx = "7";string yy = "9";auto zz = algo(xx, yy); // zz = "79"

Maybe the concatenation was expected. More likely, it was an accident. Defining minus equivalently would give dramatically different sets of accepted types. This Addable violates the mathematical rule that addition is supposed to be commutative: a+b == b+a.

也许期待的操作就是连结。更有可能的是,这只是一个意外。对等地定义减操作将会提供一套明显不同的可接受类型。这个可加性违反了加法运算满足交换律(a+b==b+a)这个规则。

Note(注意)

The ability to specify a meaningful semantics is a defining characteristic of a true concept, as opposed to a syntactic constraint.

定义明确语义的能力是真正的概念所具备的明确特征,而不是句法约束。

Example (using TS concepts)

示例(使用TS概念)

template// The operators +, -, *, and / for a number are assumed to follow the usual mathematical rulesconcept Number = has_plus && has_minus && has_multiply && has_divide;template auto algo(const N& a, const N& b){ // ... return a + b;}int x = 7;int y = 9;auto z = algo(x, y); // z = 16string xx = "7";string yy = "9";auto zz = algo(xx, yy); // error: string is not a Number

Note(注意)

Concepts with multiple operations have far lower chance of accidentally matching a type than a single-operation concept.

相比只有一个操作的概念,包含多个操作的概念偶然和某个类型匹配的可能性会大为降低。

Enforcement(实施建议)

Flag single-operation concepts when used outside the definition of other concepts.标记处于其他概念定义范围之外的单操作概念。Flag uses of enable_if that appears to simulate single-operation concepts.标记将enable_if用于模拟单操作概念的情况。

原文链接

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

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

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Aha!设计模式(93)-备忘录模式(1)
下一篇:Jest + Enzyme的快照序列化程序(jestpe)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~