Ну, я использую карту для хранения любого указателя (void *), и он используется в объекте области видимости. вот класс области.Как получить данные без коррупции при использовании void *?
class Scope
{
protected:
Scope * parent;
MyMap* map;
public:
virtual void setParent(Scope* p)=0;
virtual Scope* getParent()=0;
virtual void setOwner(void * owner)=0;
virtual void * getOwner()=0;
virtual Symbol * get(char* name)=0;
virtual Symbol * get(char* name, Signature * sig)=0;
MyMap* getMap()const;
};
и есть 2 класса OrderedScope
и DisorderedScope
которые реализуют Scope
класс.
В моем проекте я пытаюсь хранить все данные как void *, а затем я извлекаю их и отсылаю их к соответствующему типу. когда я бросал объект по его типу, я обнаружил, что некоторые данные были потеряны. вот фотография того, что я получил.
только для уточнения Package
класс имеет сферу применения. И в этом объеме я храню объекты типа Function
s. Поэтому, когда я хочу добавить к нему функцию, я должен сначала получить объект пакета, затем я могу использовать функцию add
для вставки новой функции.
Я не знаю, правильно ли я показал проблему, но я надеюсь на это. Ваша помощь приветствуется.
Почему бы не написать код, а не фотографию кода? Почему вы отметили это как 'yacc' - я не вижу ничего связанного с' yacc' в вашем вопросе? – user93353
Любое решение, использующее 'void *' для хранения произвольных элементов, вероятно, будет подозрительным дизайном ... –
Что такое «Карта»? Это как 'std :: map'? Почему вы храните 'void *' вместо хранения указателя на общий базовый класс и используете полиморфизм? – jamesdlin