【问题标题】:Pointer to member compounding指向成员复合的指针
【发布时间】:2019-10-14 15:11:43
【问题描述】:

我有两个结构

struct A
{
    int a, b;
};
struct B
{
    A c, d;
};

我想获得指向d 内部成员b 的指针。

&B::d.b; // int B::*

我能得到的最接近的是获得它的偏移量。

offsetof(B, d.b) // size_t

但这没有大小或类型信息,所以我能做的最好的就是制作一个将偏移量和类型一起传递的宏,但不是int B::*
有没有标准的解决方案?有什么非标准的解决方案吗?
在非标准方向上,我正在考虑制作一个像T<&B::d, &A::b> 这样使用的模板,并重新解释偏移量并将它们添加在一起,但我不确定如何进行重新解释部分。
我在 macOS 上使用 c++17 和最新的 Xcode clang。

【问题讨论】:

  • 你真的需要一个成员指针吗?那将是一个可以指向A::aA::b 的指针,但是如果您只需要指向一些B 实例中的A::b,那么int* 就可以了
  • @foreknownas_463035818:我在模板中传递它以用于许多实例,指向内存的指针并不是一个真正的选项

标签: c++ oop pointer-to-member


【解决方案1】:

你可以使用两个成员指针:

int A::* foo = &A::b;
A B::* bar = &B::d;

B objB;
int& db = objB.*bar.*foo;

缺点是每个偏移量都是单独存储的,如果在运行时完成,这将不必要地低效。不过对于编译时元编程应该没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 2013-05-02
    • 2023-03-12
    • 2021-12-03
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多