Название: Мини-интепретатор Отправлено: Igors от Сентябрь 28, 2011, 19:33 Добрый вечер
Ну это даже меньше чем мини :) - просто надо подавать данные в OpenGL (GLSL). Чтобы не грузить спецификой, вот псевдокод самой "подачи" Код Вызывать эти ф-ции непосредственно я не могу - в тот момент когда данные мне известны даже неясно есть ли OpenGL вообще. Поэтому мне надо сохранить данные в каком-то контейнере, а когда дело дойдет до рендера OpenGL - зарядить. Недолго думая, сделал примерно так Код Это работает, но реализация мне не нравится. Получается неприятно много приведений, разборок switch и довольно обильный текст уже на 4-5 типах данных. Нет ли лучшего решения? Примечания: Qt в проекте нет, поэтому советы типа "смотри в сторону QVariant" бесполезны. Типов данных немного (до 10), для данных типа "массив" нужна возможность очищать и добавлять элементы Спасибо Название: Re: Мини-интепретатор Отправлено: SimpleSunny от Сентябрь 28, 2011, 20:23 Qt в проекте нет, поэтому советы типа "смотри в сторону QVariant" бесполезны. А почему бесполезны? Почему не посмотреть как это сделано в QVariant (boost::any, boost::variant) и не сделать аналогично. Название: Re: Мини-интепретатор Отправлено: BRE от Сентябрь 29, 2011, 08:40 Код
Название: Re: Мини-интепретатор Отправлено: Igors от Сентябрь 29, 2011, 08:45 А почему бесполезны? Почему не посмотреть как это сделано в QVariant (boost::any, boost::variant) и не сделать аналогично. Это выглядит разумно, но редко получается :) Тот же QVariant потянет за собой массу др. хедеров и типов, процесс "подсматривания идеи" оказывается очень долгим. В итоге часто получается что копировать невыгодно, нужна более "легкая" вещь - для использования всего нескольких нужных возможностей.По существу я спрашиваю простой вещь: как сделать удобный контейнер разнотипных элементов? Название: Re: Мини-интепретатор Отправлено: Igors от Сентябрь 29, 2011, 09:06 Код
Код Но "декодировать" все равно придется :'( Название: Re: Мини-интепретатор Отправлено: BRE от Сентябрь 29, 2011, 09:16 Подход с виртуал не спасает от создания каждого нового типа и утомительных "дешифраций". Понятно что не спасает от создания каждого нового типа. Телепатических компиляторов еще не придумали. ;DКстати, можно упростить с помощью шаблонов. А вот про какие утомительные дешифрации идет речь? Не понятно. Ладно опишу один тип полней (в дальнейшем легко делается шаблон): Код
Название: Re: Мини-интепретатор Отправлено: Igors от Сентябрь 29, 2011, 10:41 Ладно опишу один тип полней (в дальнейшем легко делается шаблон): Прошу показать как сделать шаблон для такой реализацииКод
Название: Re: Мини-интепретатор Отправлено: BRE от Сентябрь 29, 2011, 13:04 Код
Название: Re: Мини-интепретатор Отправлено: Igors от Сентябрь 29, 2011, 13:15 Код
Название: Re: Мини-интепретатор Отправлено: BRE от Сентябрь 29, 2011, 13:21 Так было бы хорошо, но ф-ции установки принимают разные аргументы (см первый пост темы) Так ты для массивов другой класс-шаблон сделай. ;)Название: Re: Мини-интепретатор Отправлено: Igors от Сентябрь 29, 2011, 13:30 Так ты для массивов другой класс-шаблон сделай. ;) Согласен, там вариантов совсем немного, можно перетерпеть. А вот как бы мне ф-ции "замаскировать" - чтобы не тащить связанные с OpenGL хедеры во все места где заполняются переменные?Спасибо Название: Re: Мини-интепретатор Отправлено: BRE от Сентябрь 29, 2011, 13:43 А вот как бы мне ф-ции "замаскировать" - чтобы не тащить связанные с OpenGL хедеры во все места где заполняются переменные? В одном файле подключить gl-хедеры и определить все возможные типы через typedef.А дальше уже инклюдить этот файл? Но все равно при разворачивании шаблонов прототипы функций должны быть видны. Название: Re: Мини-интепретатор Отправлено: vregess от Сентябрь 30, 2011, 12:08 Может быть поможет cdiggins::any?
http://www.codeproject.com/KB/cpp/dynamic_typing.aspx (http://www.codeproject.com/KB/cpp/dynamic_typing.aspx) Название: Re: Мини-интепретатор Отправлено: Igors от Октябрь 01, 2011, 15:37 Может быть поможет cdiggins::any? Спасибо, интересная статейка. Согласен с автором что в данном случае свой велосипед смотрится явно выгоднее. Я сделал так (обвязки, typedef и.т.п опускаю) http://www.codeproject.com/KB/cpp/dynamic_typing.aspx (http://www.codeproject.com/KB/cpp/dynamic_typing.aspx) Код А саму связку с OpenGL тупо через if(ы). Зато все остальное получается удобнее и короче. |