- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 Alexandrescu 基于策略的设计 中,我不理解的是创建没有任何共同点的新类型,在我看来,仍然有很多共同点应该以某种方式表示。
例如,std::string
和 std::basic_string<>
: 分配器是非常内部的东西,在我看来,使用该类的代码不应知道该类正在使用哪个分配器。
但是因为已经创建了一个新类型,所以假设 std::basic_string_1
, 所有那些传递 std::string&
的方法基本上都坏了,我看不出一个std::basic_string<>
的正当理由使用不同的分配器应被视为与 std::basic_string<>
完全不同与另一个分配器。
我的问题是:为什么每个 std::basic_string<>
都没有共同的 parent ? ,这样就可以避免这个问题?通常在我的代码中,当我有一个 Whatever<T>
, 我让它继承自 WhateverBase
某种形式,什么时候T
没有显示在那个类的公共(public)界面上,它工作得很好......
最佳答案
allocator are something very internal and, in my opinion, the code using that class shall not be aware of which allocator that class is using.
这就是为什么通常您不关心,只使用 std::string
的原因.大多数代码不使用自定义分配器,因此这根本不是问题。
正如 Kerrek SB 在评论中指出的那样,您可以选择使用 std::experimental::pmr::string
它使用类型删除的分配器,因此隐藏了使用哪种分配器的详细信息。这会产生一些运行时成本,但也有一些优势。
更一般地说,您是对的,基于策略的设计会导致无法互操作的不同类型的激增。有时这是一个问题(有时不是)。处理这个问题的一种方法是编写不关心它是否处理 policy_base_ptr<X, Y, Z>
的通用代码。或 policy_based_ptr<A, B, C>
.编写使用“某种智能指针”的通用代码,您不关心确切的类型。但这并不总是一个选项,例如在定义接口(interface)时,您经常需要使用具体类型。
My question is: why there is not common parent for every
std::basic_string<>
, so that this problem could be avoided? Generally in my code when I have aWhatever<T>
, I make it inherits from aWhateverBase
of some sort, and whenT
is not shown on the public interface of that class, it works greatfully...
这意味着您的类是多态的,只知道基类的代码必须通过引用传递它。它不能按值传递,因为它会被切片。这意味着您必须小心对象所有权,并关心引用何时仍然有效,以及谁负责销毁派生类型。
这是您在自己的软件中做出的完全合理的选择,但不适合像 std::string
这样的通用词汇类型。 .字符串可以按值传递并轻松复制至关重要。
关于基于 C++ 策略的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33786819/
作者:小林coding 计算机八股文网站:https://xiaolincoding.com 大家好,我是小林。 今天跟大家聊聊,常见的缓存更新策略。 Cache Aside(旁路缓存)策略; Rea
我使用 git 多年,最近为了一个项目改用 mercurial。在过去的 6 个月里,我已经学会了如何通过命令行很好地使用 Mercurial。 这可能是我的想象,但在我看来,mercurial 在
这个问题适合任何熟悉的人 Node.js express Passport 带有 Passport 的 JWT 身份验证(JSON Web token ) Facebook OAuth2.0 或谷歌
在 Coq 中,当试图证明记录的相等性时,是否有一种策略可以将其分解为所有字段的相等性?例如, Record R := {x:nat;y:nat}. Variables a b c d : nat.
我正在处理的项目目前只有一个 Bootstrap 文件,用于初始化应用程序中的所有 javascript 对象。类似于下面的代码 if(document.getElementById('nav'))
我正在考虑使用 OpenLDAP 在首次登录时添加密码到期和强制更改密码。 似乎使用 ppolicy 覆盖来实现这一点。 当我在 ppolicy.schema 中看到这个时,我开始使用 ppolicy
这基本上是我昨天问的一个问题的重新陈述,因为我得到的一个答案似乎没有理解我的问题,所以我一定是不清楚。我的错。 因为 WPF 依赖于 DirectX,所以它对卡和驱动程序的内部非常敏感。我有一个案例,
我是单点登录(SSO)概念的新手。我开始知道 SAML 请求和响应是实现 SSO 流程的最佳方式。然后我开始阅读有关 SAML2.0 的信息。我来了一个术语 NameIdPolicy 在 saml1.
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
在 Azure 上创建新的 SQL 数据库时,它将“计算+存储”选项设置为“2 vCore + 32GB 数据最大大小”作为默认配置,但我不想使用 vCore,我可以更改它。但问题是,是否可以通过策略
我希望创建一项策略,防止在未启用身份验证的情况下创建应用服务(仅审核它们是不够的)。 以下策略可以正确识别未启用身份验证的现有资源: { "mode": "All", "policyRule"
我正在尝试从现有 AuditIfNotExists 策略创建 DeployIfNotExists 策略。部署时不会出错,但会错误提示“没有相关资源与策略定义中的效果详细信息匹配”。当评估政策时。当我将
我正在尝试从现有 AuditIfNotExists 策略创建 DeployIfNotExists 策略。部署时不会出错,但会错误提示“没有相关资源与策略定义中的效果详细信息匹配”。当评估政策时。当我将
我正在使用 wunderground 的 json api 来查询我网站上的天气状况。 api 为我提供了一个包含所有必要数据的漂亮 json 对象,但我每天只能进行多次调用。存储这些数据的首选方式是
我有一个名为可视化数据结构的项目。我有这样的 OOP 设计。 Class VisualDataStructures extends JFrame Class ControlPanel extends
这个问题在这里已经有了答案: 关闭 14 年前。 副本: Use javascript to inject script references as needed? Javascript 没有任何指
Android 应用程序遇到了一些 ANR 问题,因此我实现了 StrictMode 策略。以前从未使用过这个,所以希望有人可以帮助解释以下内容: 为什么日志显示 2 个看似相似的违规行为,除了前 4
我目前正在尝试解决一个问题。假设我们在路上行驶,我们知道路上有 10 家酒店。每家酒店都有 0 到 6 星。我的问题是:找到选择星级酒店的最佳解决方案。唯一的问题是:您不能回头去参观您已经决定不去的酒
我正在将我的应用程序迁移到 MVP。从这个 konmik 中获得了有关静态演示者模式的提示 这是我的简要 MVP 策略。为简洁起见,删除了大部分样板和 MVP 监听器。这个策略帮助我改变了方向,证明了
我是一名优秀的程序员,十分优秀!