问题标签 [member-pointers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
115 浏览

c++ - 比较成员指针

我阅读了有关内置比较运算符的信息。我想知道为什么成员指针没有排序运算符(<、、、、<=)。比较结构实例化的两个成员的地址是有效的。>>=

http://en.cppreference.com/w/cpp/language/operator_comparison

3) 如果在一个非联合类类型的对象中,两个指针指向具有相同成员访问权限的不同非静态数据成员,或者指向这些成员的子对象或数组元素,递归地,指向后面声明的成员的指针进行比较更大。换句话说,三种成员访问模式中的每一种中的类成员都按声明顺序定位在内存中。

使用 adressof operator( &) 和成员指针解引用 operator( .*) 可以比较地址,但需要一个实例。

我的问题:

  1. 为什么没有用于成员指针的内置排序运算符?

  2. 如何在没有实例的情况下比较两个成员指针?

我的做法:

我考虑了offsetof-macro,但它不将成员指针作为参数。

0 投票
3 回答
65 浏览

c++ - 在使用指向 const 和非常量方法的成员指针时减少模板特化的数量

我有一些模板代码,它采用指向类的共享指针并调用函数或方法。问题来了,如果被调用的方法被定义为const.

例子:

我的问题是RET (CLASS::*mem_ptr)( ARGS...) const. 我只是想停止为 const 复制整个代码。在现实世界的代码中,该函数再次调用另一个模板化的函数,这导致此处重复了大量代码。

有没有机会摆脱 const 成员指针的特化?

0 投票
1 回答
51 浏览

c++ - 通过 reinterpret_casting 方法指针从指向基类的指针调用派生类的方法。这是UB吗?

通过将指向派生类型对象的指针分配给其基类的指针,我发现您可以将派生类中的方法重新转换为基类的指针,即使基类没有任何此类功能(虚拟、隐藏或其他)。它可以被取消引用并从那里调用,它“正常工作”。但我想确保它不是 UB。这是UB吗?它是便携式的吗?

可编译示例:

0 投票
1 回答
104 浏览

c++ - 如何将指向类内成员的指针传递给外部类?

我正在尝试将指向类成员(Dialog::handler)的指针从其方法(在 Dialog::r​​ender 的范围内)传递给某个外部方法(Button::OnClick)。

这是一个小例子:

但是编译器显示错误:

非标准语法;使用 '&' 创建指向成员的指针

我还尝试了其他组合,例如:

  • 这个->处理程序。
  • &this.handler。
  • 这个。*处理程序。
  • ETC

但显然他们失败了。

0 投票
2 回答
283 浏览

c++ - 无需外部库的简单结构的序列化

我正在尝试序列化像下面这样的简单单级类,没有像 boost 这样的外部库,也不必为每个类实现序列化器函数。尽管我的类很少,我可以轻松地为每个类实现一个序列化程序,但为了将来参考,我希望手头有一个可以很好地扩展的简单解决方案。

每个类被序列化的要求是它的成员只能是可序列化的类型,并且定义了一个成员指针数组,这样在序列化时,无论传递哪个类,都可以迭代成员。

问题是编译失败是因为缺少成员指针被取消引用的强制转换,显然:

esp32.ino: 122:35: error: 'footprint.MessageFootprint<1>::Members[i]' 不能用作成员指针,因为它的类型是 'void*

我不知道如何将成员指针存储在可迭代集合中或如何避免强制转换void*。这就是我的目标。我想在具有单个通用序列化函数的序列化时迭代类成员。我不知道该怎么办。

0 投票
1 回答
126 浏览

c++ - 从模板参数包将指向成员的指针传递给函数对象

Bellow 是示例代码,它演示了我正在尝试做的事情。

基本上,我想将多个指向成员的指针传递给类方法,该类方法接受std::function传递给目标函数对象的对象和变量号或参数。

这些变量参数可以是任何东西:变量、指向成员的指针等。

使用普通变量时我没有问题,但是如何扩展参数包,其中参数是指向成员的指针,但函数对象需要 POD 数据类型?

如何获取参数包中成员的指针值并将其传递给函数对象?

0 投票
2 回答
126 浏览

c++ - 如何在编译时获取指向非静态数据成员的指针的对象类型?

假设我们有一个像这样的简单数据类:

以及指向数据对象中成员的指针类型:

如何推断指针指向的成员变量的类型?具体来说,我如何获得:

到目前为止我尝试了什么:

没有成功。标准中是否隐藏着诸如 remove_member_object_pointer 之类的东西?这是我需要的,但似乎找不到..

0 投票
2 回答
84 浏览

c++ - 创建 std::function ,它返回带有函数成员值的变量。分段故障

我正在编写一个包装类来将自定义结构成员变量包装成变体。给定对结构对象的引用,std::function 必须返回一个变体,其中包含特定成员的值 - 最初创建 std::function 时使用该成员。这意味着,我需要在创建函数时保存指向指定类成员的指针。

此代码可以编译,但是当我尝试调用函数对象时,出现分段错误。为什么会发生以及如何解决?

0 投票
1 回答
46 浏览

c++ - OOP 中的单个成员指针

我是一名学生,我在理解面向对象编程 (OOP) 中的单个成员指针的概念时遇到了问题,我在 Google 上搜索了很多但没有得到这个想法!

你能帮我详细了解一下吗?

0 投票
0 回答
44 浏览

c++ - C++ 拥有作为指向另一个类的指针(或引用)并且可以处理 const 和非 const 情况的类成员的最佳方式

考虑以下示例代码。它按预期编译和工作。但是,如果我在 main 函数的第一行的开头添加“const”,它将无法编译,因为 B 类需要一个指向 A的指针,并且添加 const 后,我​​们将有一个指向const A的指针。模板化 B 是一种选择,但我想知道是否有更清洁/更好的解决方案。我愿意接受各种建议,包括将 B 移到 A 中(如果有帮助的话)(B 仅供 A 使用)。