pre*_*old 13 c++ member-pointers
这可能最好用示例代码显示.以下无法使用g ++编译:
struct Base {
};
struct Derived : public Base {
};
struct Container {
Derived data_;
};
int main(void) {
Base Container::*ptr = &Container::data_;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:invalid conversion from 'Derived Container::*' to Base Container::*'.语言不允许这样做吗?这是编译器错误吗?我使用了错误的语法吗?
请帮忙!
关于为什么我要这样做的一些背景:我有几个我想主要用作派生类型的成员数据,但我希望能够通过一些常用代码填充它们.数据将以任意顺序出现,并有一个字符串标签,我将用它来选择要填充的相应成员数据.我计划创建一个std::map<std::string, Base Container::*>通过公共接口为每个成员分配数据.我想避免使用巨型if else构造来找到正确的成员数据.
这不是编译器错误,你不能这样做。(但是您可以将 Base::* 分配给 Derived::*)。
我没有看到任何限制的充分理由(除了处理多重继承的情况,这会使成员指针的表示更加复杂)。