结构重新绑定::其他是什么意思
What does struct rebind::other mean?
这个问题源于我上一个问题:为什么运算符new/delete/varial不应该在头文件中C++?快速总结一下,我正在学习覆盖全局运算符new
、delete
等。我现在需要一个自定义分配器类(我的重载运算符 new 调用 std::set::insert(...)
,它本身似乎调用 new
,因此无限回避(。我认为如果我向我的std::set
提供一个自定义分配器(例如,使用 malloc
而不是 new
(,我可以绕过无限递归。
我已经阅读了一些关于实现自定义分配器的阅读,并且对struct rebind
的语义有点困惑。
这里有一个很好的问答:解析分配器::重新绑定调用,但我仍然对一个特定的项目感到困惑。 cplusplus.com 说struct rebind
:
其成员类型"其他"是等效的分配器类型,用于分配类型为"类型"的元素
我不明白other
是如何成为struct rebind
的成员.我发现struct rebind
的定义如下所示:
template <class Type> struct rebind {
typedef allocator<Type> other;
};
我不明白other
是如何成为struct rebind
的成员变量。这只是typedef
编辑。如果我确实在全局命名空间中typedef int foo;
,这并不意味着在全局命名空间中声明了 int
类型的全局变量,那么反过来,other
如何成为 struct rebind
的成员?
顺便说一句,我知道(或者至少我已经读过(这在 C++11 之后都得到了简化,但我仍然想先了解这一点,以便我了解我的基本原理。感谢您的任何帮助。
在这个话题上,有人也可以解释一下结构内typedef
处理吗?我以前在回答者约翰内斯·绍布(Johannes Schaub(的这个惊人例子中见过一次,但我还没有完全理解它。对我来说,它看起来像是将 typedef 的范围限制在包含结构的实例中。
更新:
我想把这个添加到我的问题中。使用 cppreference.com 中的这个删节示例:
#include <memory>
#include <iostream>
#include <string>
int main()
{
std::allocator<int> a1; // default allocator for ints
decltype(a1)::rebind<std::string>::other a2_1;
}
这句话decltype(a1)::rebind<std::string>::other a2_1;
说std::allocator<std::string> a2_1;
不是很长吗?
我不明白其他是如何成为
struct rebind
的成员变量.
不是。
这只是
typedef
编辑。
没错。正如报价所说,这是一种成员类型。
在这个主题上,有人也可以解释结构中的类型定义交易吗?我以前在回答者约翰内斯·绍布(Johannes Schaub(的这个惊人例子中见过一次,但我还没有完全理解它。
很难给出一个不会简单地有相同问题的例子(因为你没有说明你对 litb 的例子有什么不理解(,但我们来了:
struct Foo
{
typedef int bar;
};
Foo::bar x = 42; // creates an int named `x`, because Foo::bar is int
对我来说,它看起来像是将 typedef 的范围限制在包含结构的实例中。
没错。生成的类型是类的成员,就像嵌套类一样,就像类是其封闭命名空间的成员一样。
顺便说一句,我知道(或者至少我已经读过(这一切都在 C++11 之后得到了简化
否,成员类型在语言的任何修订中都没有发生根本性更改(尽管新的using
语法可以选择性地使声明它们更容易(。
如果我在全局命名空间中
typedef int foo;
,这并不意味着全局命名空间中声明了int
类型的全局变量
否,但在全局命名空间中会有一个名为 foo
的类型。
这句台词
decltype(a1)::rebind<std::string>::other a2_1;
说std::allocator<std::string> a2_1;
不是很长吗?
是的;一条很长的路,而且无论a1
是什么都有效(所以结果可能根本不std::allocator<T>
(。这在编写模板时很重要。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- 在这种情况下,我们可以使用静态而不是朋友吗,还有其他解决方案是什么
- 创建实例化所有其他类和子系统的类的目的是什么
- 与std::mutex相比,其他mutex包装库的优势是什么
- "函数将查找并存储在参数中,其他两个参数的总和"是什么意思?
- Streamsize,Streamoff和其他与流相关的数据类型的实际类型是什么
- 将迭代器取消引用到映射或 C++ 中的某些其他复合类型的类型是什么
- 在其他函数体中声明函数方法的用例是什么
- 从其他类访问非类型模板参数的最佳方式是什么
- 游戏访问其他班级成员的最佳方式是什么?
- 使用其他基类的方法满足纯抽象方法的最简单方法是什么
- 在c++中,允许其他类访问一个类中的成员的最佳方法是什么?
- 结构重新绑定::其他是什么意思
- 放在其他类定义的头文件中时"class ClassName;"是什么意思?
- 在其他语言中,最接近Apache Hadoop的东西是什么
- c++中与#define KB_UP 72相关的其他定义是什么?它们都是什么?