Skip to content

关于本章

一、通过C++ magic function/special function,来对C++ object的行为进行控制:

require: 要求

prohibit: 禁止

二、是在学习 Requiring-or-Prohibiting-Heap-based-Objects-idiom 时,及一反三而想到的。

OOP

OOP、behavior、interface、magic function

GP: Behavior、magic function,给予或禁止某种behavior,valid expression

每种behavior都有对应的operator、magic function,language support function(std::swap),都可以使用**valid expression**来进行描述,这是典型的**behavior-based**,比如thread是movable,但是non-copyable;

Valid expression and concept

可以使用Valid expression来描述某种behavior、运行,进而去:

1、runtime computation: 运行、计算,其实就是我们的program

2、compile type computation: 校验、reflection,这其实就是下面的"Concept/named requirement"

Concept/named requirement

1、concept也是使用valid expression来表达的,比如expression SFINAE, 另外还有constexpr,

2、std::declval就是用于构造expression、declval 方便地表达expression

3、Concept/named requirement其实就是compile-time expression,其实是compile-time computation

Summary

NOTE: 总结这样的table非常重要, 能够对C++ OOP有完整的认知

concept/named requirement expression magic function

如何实现?

Mixin 给予或删除

1、CRTP behavior mixin 给予或删除

2、non-copyable、strong type都是这个的例子

3、behavior、interface/magic function、able(在fluentcpp strong type的实现中,就非常多地使用"able"这个词语)

delete keyword

1、对于某种类型,可以对其给予、禁止某种behavior,这主要通过magic function来实现的。

2、使用delete keyword

Example

1、fluentcpp strong type

基于behavior

2、non-copyable

3、Requiring-or-Prohibiting-Heap-based-Objects