Это, вероятно, лучше всего показывает пример кода. Следующая команда не скомпилируется с 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
для поиска правильных данных элемента.