- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这个问题来 self 之前的问题:Why shouldn't C++ operator new/delete/variants be in header files? .快速总结一下,我正在学习重写全局运算符 new
, delete
等。我现在需要一个自定义分配器类(我的重载运算符新调用 std::set::insert(...)
,它本身似乎调用 new
,因此无限回避)。我认为如果我为我的 malloc
提供自定义分配器(例如,使用 new
而不是 std::set
)我可以绕过无限递归。
我已经阅读了一些关于实现自定义分配器的文章,并且对 struct rebind
的语义有点困惑。 .
这里有很好的问答:Parsing allocator::rebind calls ,但我仍然对某个特定项目感到困惑。 cplusplus.com 说 struct rebind
:
Its member type other is the equivalent allocator type to allocate elements of type Type
我不明白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
的成员(member)?
顺便说一句,我知道(或者至少我读过)这一切在 C++11 之后都得到了简化,但我仍然想先了解这一点,这样我的基础知识就会下降。感谢您的帮助。
在这个话题上,有人能解释一下处理typedef
吗?在一个结构中?我以前在这个 amazing example 看过一次来自回答者 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;
?
最佳答案
I don't see how other is a member variable of
struct rebind
.
不是。
It's just
typedef
ed.
没错。它是一个成员 type,正如引用所说。
While on this topic, can someone also explain the deal with typedefing within a struct? I've seen it once before in this amazing example from answerer Johannes Schaub, but I don't fully grok it yet.
很难给出一个不会简单地遇到相同问题的示例(因为您没有说明您对 litb 的示例不了解的地方),但我们开始吧:
struct Foo
{
typedef int bar;
};
Foo::bar x = 42; // creates an int named `x`, because Foo::bar is int
To me it looks like it's restricting the scope of the typedef to within an instance of the containing struct.
没错。结果类型是类的成员,就像嵌套类一样,就像类是其封闭命名空间的成员一样。
By the way, I know (or at least I've read that) this has all been simplified post C++11
不,成员类型在语言的任何修订版中都没有发生根本性的变化(尽管新的 using
语法可以选择性地使声明它们更容易)。
If I did
typedef int foo;
in the global namespace, that doesn't mean there's a global variable of typeint
declared in the global namespace
没有,但是会有一个名为 foo
的类型在全局命名空间中。
Isn't the line
decltype(a1)::rebind<std::string>::other a2_1;
a long way of sayingstd::allocator<std::string> a2_1;
?
是的;很长的路要走,无论如何都行得通a1
是(所以结果可能根本不是 std::allocator<T>
)。这在您编写模板时很重要。
关于c++ - struct rebind::other 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39338032/
将 RadGrid 用于 Asp.Net Ajax(来自 Telerik) 我需要重新设置 CurrentPageIndex。 Some examples说下一行代码应该是 myGrid.Rebind
在 Rust 中,为了改变一个可变变量的值,let x = 12 有什么区别?或 x = 12在下面的示例代码中? fn main() { let mut x: i32 = 8; {
在 Rust 中,为了改变可变变量的值,以下示例代码中的 let x = 12 或 x = 12 有什么区别? fn main() { let mut x: i32 = 8; {
我已经能够使用按钮(图像映射器)设置 map 坐标,但在加载新图像时无法重新绑定(bind)到新坐标。 我有一张图像和映射,然后我用一个按钮更改图像。我还想更改映射坐标并为不同图像显示不同的映射。任何
这个问题来 self 之前的问题:Why shouldn't C++ operator new/delete/variants be in header files? .快速总结一下,我正在学习重写全
为了进一步了解标准库的实际实现方式,我正在检查 Visual Studio 中的所有容器。这里我看到了一些奇怪的结构: 在 std::list<> 的某些基类中找到以下typedef typedef
当我尝试编译GWT时,我收到一个错误,com.allen_sauer.gwt.log.client.util.impl.DOMUtilImpl无法抽象。如何解决这个错误? 我正在使用GWT 2.6。
我正在服务器上做一个议程,一切都很顺利,我启动了 RMI 注册表,服务器工作正常,我测试了代码并且能够登录。现在我想开始将代码放入方法中并从服务器在客户端中调用它们,当我将 Naming.rebind
我有一个问题。刷新 div 后,召唤灰盒表单的单击事件被破坏。如何将函数重新绑定(bind)到刷新的内容,其中包括将重新触发灰盒的链接?我假设我必须在单击事件后重新初始化功能。我是新手,感谢您的帮助。
我是编程新手,刚开始阅读有关 DataBinding 方法的内容。我也遇到了 Rebinding 方法,乍一看它们似乎在做同样的事情。似乎在任何地方都没有实际答案。 每次更改 DataSource 时
Python 简而言之: Eschew global Never use global if the function body just uses a global variable (includ
首先,我的问题仅适用于 Web 应用程序,我倾向于使用 InRequestScope 解决方案设置我的大部分 Ninject 绑定(bind)。 我正在考虑切换功能的方法,我的一个想法是调用: k
我正在尝试了解 SQL Server 执行计划中的物理运算符。此页面非常有帮助: http://technet.microsoft.com/en-us/library/ms191158.aspx SS
单击按钮后,我的脚本会加载新内容。只要它正在加载,我就不希望元素列表可点击。 是否有任何方法可以解除这些元素的点击事件的绑定(bind),加载内容,然后正确“重新绑定(bind)”事件? 我想要防止的
我取消绑定(bind) slider 以禁止人们在游戏结束后上下移动它,但是当他们再次单击玩时, slider 应该重新绑定(bind)以再次工作。 在我的 startGame() 函数中,该函数在
我认为容器必须将它们提供的任何分配器重新绑定(bind)到一个有效的分配器中,但在随 LLVM(我猜是 libc++ 的一部分)附带的 STL 中,情况似乎并非如此。这是 LLVM 中的错误,还是标准
所以我在网上找到了这段代码,它计算了 d3 图中节点上的 dijkstra 最短路径算法。问题是 d3.rebind 已被删除,我还没有找到修复这段代码以使其工作的方法。有什么建议么?我也知道这段代码
以下在 C++ 中是否合法? 据我所知,Reference 有一个微不足道的析构函数,所以它应该是合法的。 但我认为引用不能合法地反弹......可以吗? template struct Refere
本文整理了Java中com.bitfire.postprocessing.filters.Zoom.rebind()方法的一些代码示例,展示了Zoom.rebind()的具体用法。这些代码示例主要来源
我有一个 anchor 标记 next制作成“按钮”。有时,如果没有新内容可显示,则需要隐藏此标签。如果我只是用 .hide() 隐藏按钮并用 .show() 重新显示它,那么一切都可以正常工作。但我
我是一名优秀的程序员,十分优秀!