Реализация boost любого класса - PullRequest
1 голос
/ 26 апреля 2011

Я пытаюсь эмулировать boost :: any для моего игрушечного языка, следуя принятому ответу на следующий вопрос,

Доступ к значениям в классе, аналогичном boost :: any

Я могу иметь,

Element e1 = 11;
Element e2 = 12.1;

Теперь я хотел бы перегрузить +, чтобы я мог,

e3 = e1 + e2;

но во время выполнения я не буду знать, будет ли e1 содержать целое или двойное число, но это будет число. Итак, как я могу изменить const, чтобы он также сохранял переменную, сообщающую мне, какой тип элемента удерживать, чтобы я мог вызвать правильный метод Get.


    template /typename Datatype/
    Element(Datatype InitialValue)
    {
        StoredValue = new ValueStorage(InitialValue);
    }

Я также делаю это на микропроцессоре, который не имеет исключений, передает -fno-rtti компилятору и не может использовать stdlib или boost.

1 Ответ

0 голосов
/ 26 апреля 2011

Может быть, Любопытно повторяющийся шаблон может вам помочь.Идея состоит в том, чтобы наследовать базовый класс с аргументом шаблона, установленным для производного класса (это допустимо, поскольку сразу после записи class Derived это допустимый идентификатор в источнике).Я не знаю, является ли это более редким для памяти, чем для виртуальных функций, но он определенно избегает их:).

Если у вас недостаточно памяти, возможно, вам следует оценить возможность перехода на другой язык (C?) поскольку C ++ не так уж легок для встраиваемых систем.

...