gpt4 book ai didi

c++ - 指向成员变量的多态指针

转载 作者:行者123 更新时间:2023-11-30 04:33:09 25 4
gpt4 key购买 nike

我正在尝试以多态方式使用指向成员变量的指针。

这个有效:

struct Foo
{
int member0;
int member1;

int* getMember( int i )
{
static int Foo::* table[2] = { &Foo::member0, &Foo::member1 };
return &( this->*table[i] );
}
};

这不是,因为成员不是同一类型 (BaseClass):

struct Foo
{
SubClassA member0;
SubClassB member1;

BaseClass* getMember( int i )
{
static BaseClass Foo::* table[2] = { &Foo::member0, &Foo::member1 };
return &( this->*table[i] );
}
};

g++报错是:

[...] invalid conversion from 'SubClassA Foo::*' to 'BaseClass Foo::*'
[...] invalid conversion from 'SubClassB Foo::*' to 'BaseClass Foo::*'

有没有办法让它工作,即将成员指针“向上转换”到它的基类?

最佳答案

这是不可能的。由于多重继承,基地址并不总是与派生地址相同。您需要一些隐藏的地址调整魔法来将一个转换为另一个,而指向成员的指针是一个非常简单的对象(基本上是一个整数偏移量)无法容纳这种魔法。

的确,地址调整只是有时需要,当不需要时,原则上可以允许指向成员的多态指针。但为了简单性和一致性,并没有这样做。

您可以使用指向接受 Foo* 并返回 BaseClass* 的函数(或类似函数的对象)的指针,而不是指向成员的指针。不过,您必须为每个成员创建一个单独的函数。

关于c++ - 指向成员变量的多态指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7081513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com