这可能最好用示例代码来展示。以下无法使用 g++ 编译:
struct Base {
};
struct Derived : public Base {
};
struct Container {
Derived data_;
};
int main(void) {
Base Container::*ptr = &Container::data_;
}
我收到以下错误:invalid conversion from 'Derived Container::*' to Base Container::*'
。这是语言不允许的吗?这是编译器错误吗?我使用了错误的语法吗?
请帮忙!
关于我为什么要这样做的一些背景知识:我有几个成员数据片段,我想主要用作它们的派生类型,但我希望能够通过一些通用代码填充它们。数据将以任意顺序出现,并具有一个字符串标签,我将使用它来选择要填充的适当成员数据。我正计划创建一个std::map<std::string, Base Container::*>
通过通用接口将数据分配给每个成员的方法。我想避免有一个巨大的if else
结构来找到正确的成员数据。