- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在阅读 C++11 中的 SCARY 迭代器时,I see :
From a compiler perspective there is nothing wrong here. From a practical standpoint, however, there isn’t any semantic dependence between list iterators and list allocators. And, in general for all STL containers, iterators only depend (semantically speaking) on the container element type.
虽然有些事情我不明白:
迭代器返回 reference
和 pointer
在 operator *
时输入或 operator->
应用于他们。 reference
, pointer
, difference_type
等源自 typedef
s 在 allocator 中。
但是分配器不一定必须定义pointer
作为value_type *
(甚至 difference_type
作为 ptrdiff_t
),例如。
迭代器(一个可怕的迭代器)如何在不知道分配器的情况下知道返回什么数据类型?
最佳答案
分配器最初的设计目的是为编译程序的平台的内存模型提供一个接口(interface)。大多数当前架构(如果不是全部)都提供平面内存模型,并且单个指针类型可用于在任何程序中寻址内存(不再需要近指针和远指针)。
这反射(reflect)在 C++11 的 allocator_traits
中。现在,分配器不再强制提供许多以前需要的 typedef,包括 pointer_type
或 reference_type
、difference_type
等等,因为有一个已知的良好默认值。这确实映射到当前实践,在大多数 STL 实现中,这些类型在所有分配器中都是相同的。
只要分配器不提供 typedef 或类型与 allocator_traits
中提供的默认值相同,就没有必要根据用于构造容器的分配器来区分迭代器。在该假设不成立的情况下,实现可以确定仅为那些提供与默认类型不同的 typedef 集的分配器使用不同的迭代器类型。
请注意,我没有查看它们的实现,因此请从表面上看:这将支持预期目的(在不违反标准合规性的情况下最大限度地减少生成的代码)。
另请注意,这不是唯一的方法。 C++11 中的当前分配器模型支持使用多态分配器,即使该标准尚未提供实现。用polymorphic allocators单个分配器模板参数(多态适配器)提供类型定义和与容器的接口(interface),在内部管理指向用于提供内存的实际分配器的指针。
多态分配器的目的与链接文章中引用的论文相同:允许创建词汇类型。 SCARY 分配器专注于为特定容器类型的迭代提供词汇类型,而多态分配器更进一步,允许将容器本身用作词汇类型,而不管实际的容器是什么获取内存的机制是。
您可以在 Bloomberg 的 BSL 中找到多态分配器(使用不同名称)的引用实现。
关于c++ - 为什么迭代器不依赖于分配器? (也就是说,让迭代器 SCARY 不会违反分配器的 typedef 抽象吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19944621/
我对 java 中的抽象有点困惑。 我查了很多页面说抽象就是数据隐藏(隐藏实现)。 我对抽象的理解是它是“部分实现”。只需在抽象类/接口(interface)中定义您需要的内容,然后扩展/实现它们并添
我是 Ruby 的新手,主要来自 C# 和 ActionScript 3(以及其他语言)。我对抽象功能很好奇。具体来说,包装和抽象 Ruby 的 FTP 和 SFTP 库。 我四处搜索,发现了一个名为
目录 Java基础知识(抽象) 抽象 抽象定义 abstract的使用 定义抽象类
这个月我花了一些时间与 Emacs Lisp 进行斗争,试图获得更好地满足我需求的自动缩进。令人惊讶的是,大多数缩进代码是多么低级。我只看到了很少的抽象,例如 搜索不在字符串或注释中的第一个正则表达式
我有以下内容: public abstract class Foo{ //contents of Foo // ... public class Bar extends
我有三个类(class)(A 类、B 类和 C 类)。 类 A 调用 B 的实例并运行 start()。 B类扩展了Thread,因此当调用start()时,run()方法中的任何内容都会被执行。 在
这个问题已经有答案了: Calling a subclass method from superclass (5 个回答) 已关闭 7 年前。 Klasse1是一个抽象类,有一个 foo()方法。 K
我有一个这样的函数: def test(): x = "3" # In actual code, this is computed if x is None: retu
我有两个基类之间的关系: public abstract class RecruiterBase { // Properties declare here // Constructors de
这是我第一次发帖,但我遇到了很多问题。我目前有一个带有标题的 AbstractDevice 类: public abstract class AbstractDevice> implements De
我有一个 MotorDefinition 类和一个名为 Motor 的抽象类: class MotorDefinition { public: MotorDefinition(int p1,
是否有任何方法可以在这种代码(sass)中制定 css 的抽象规则: #cottage-image-gallery input:nth-of-type(1):checked ~ label:nth-o
是否可以声明一个已知的基类型并允许传输所有派生类型? [ServiceContract] public interface IService { [OperationContract]
我目前正在为基于 Java 的文本游戏开发角色生成机制,但我遇到了一个问题,看不出哪里出了问题。我有一个“Character”类,它是抽象的,然后是另一个类“NPCharacter”,它是建立在这个之
抱歉,标题令人困惑。不太确定如何表达它,这可能是问题所在! 我正在寻找一个好的抽象来用于涉及并发线程的情况。 我已经接近了,但还不是很清楚。 稍微简化一下,我在 Android 手机上收集了两种传感器
提前感谢您阅读本文。我不完全理解如何/何时使用摘要,所以我试图在我从事的每个项目中考虑它,看看它是否会在某一天全部点击 Smile | :) 此外,可访问性级别(私有(private)、 protec
我正在探索用于生成 Web 内容的 XML -> XSLT -> HTML 模因。我的 XSLT 经验很少。 我很好奇 XSLT 中有哪些机制可用于处理抽象或“重构”。 例如,使用通用 HTML 和服
在这些谈话中 Nicholas Zakas和 Addy Osmani他们讨论了在构建大型 Javascript 应用程序时将外观模式用作沙箱的想法,以便将应用程序与底层基础库分离。 这种解耦理论上允许
我使用C++和CUDA/C,想为特定问题编写代码,但遇到了一个非常棘手的简化问题。 我在并行编程方面的经验不容忽视,但相当有限,我无法完全预见到此问题的特殊性。 我怀疑是否有一种方便甚至“轻松”的方式
假设我有: trait A class B extends A class C extends A 有没有办法配置类型参数: class Foo[AType <: A with canCreateIn
我是一名优秀的程序员,十分优秀!