gpt4 book ai didi

c++ - 政策是概念吗?

转载 作者:太空狗 更新时间:2023-10-29 20:38:21 25 4
gpt4 key购买 nike

在完成现代 C++ 设计(Alexandrescu,2001 年)的第 1 部分时,我想到了以下想法:策略不只是概念吗?

如果我理解正确的话,概念是对实现该概念的类的接口(interface)的一组要求。

策略也是策略类必须满足的规范。 (虽然一些策略类可以提供丰富的接口(interface),但我不确定这是否会使策略超出概念范围)

最佳答案

您需要考虑概念和政策的目标是什么。

概念在句法和语义上建立了关于类的强大假设。例如,Comparable暗示存在类型比较运算符以及某些公理成立,即 a == b -> a is equivalent to b ,而不是 operator== 的任何其他实现.强大的假设使代码更具可预测性。

另一方面,策略建立类的实际行为,强调可互换性。政策的每个单独实现都包含一个或多个概念;但是,插入到类中的策略变体仅共享约束。例如(伪代码):

// constraint Lockable -> has Lock() and Unlock() methods

// concept RealLockable -> constrained by Lockable, Lock() blocks other threads
// concept FakeLockable -> constrained by Lockable, Lock() does nothing

class FakeLock; // a policy that embodies the concept FakeLockable
class Lock; // a policy that embodies the concept RealLockable
class RecursiveLock; // a policy that can also embody the concept of RealLockable

template<class T, Lockable Lock> // constrained by Lockable
class Queue;

策略是一种改变目标类行为的实现技术。概念是建立假设的明确工具:

template<Comparable T>
class PriorityQueue;

Comparable T在我看来,这不是一项政策,因为当您指定 PriorityQueue<int> 时或 PriorityQueue<double>您的目标不是改变行为:在概念层面上,所有这些队列所做的就是允许您在恒定时间内访问最小或最大元素。但是,使用某些 future 的语法,您可以声明 T体现数学上正确的语义,即 a < b -> b > a , 然后 Comparable T将是一个概念。

最后,无论政策与否,每个类别都代表一两个概念。类隐式引入概念,概念显式记录它们。

关于c++ - 政策是概念吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31903712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com