Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скриптовый язык. спиок переменных 
:(
    Опции темы
ZC1989
Дата 12.12.2012, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



Всем Доброго времени суток)

пытаюсь написать примитивный скриптовый язык. начал из далека, и первым решил сделать стек где будут храниться переменные используемые в скрипте. По сути стек у меня это связанный список. вот так выглядит сам элемент переменной
Код

enum _type {int_,bool_,other_,};

class DS_VAR {
private:
public:

    DS_VAR *_next; // 
    char *name;
    BYTE *b;
    
    _type type_;

    //
    DS_VAR ( char *name_ );

    //
    ~DS_VAR ();

    template <class typedata>
    void set ( typedata _var ) {

        if( typeid(typedata) == typeid(int) ) type_ = int_;
        else if( typeid(typedata) == typeid(bool) ) type_ = bool_;
        else type_ = other_;

        b = new BYTE[sizeof(_var)];
        memset( &b, 0, sizeof(b) );
        memcpy( &b, &_var, sizeof(b) );
    }

    void _view () {

        switch( type_ ) {
            case int_: printf( "INT: %d", (int)b ); break;
            case bool_: printf( "BOOL: %d", (int)b ); break;
            case other_: printf( "OTHER: %s", (char*)b ); break;
        }
        printf( "\n" );
    }

};


в общем ничего такого уж сложного нету, и это работает, но мне очень не нравится как получилось сделать хранение оригинального типа данных.

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

делать весь класс шаблоном как то не хочется, потому что тогда получается что весь список будет принадлежать какому то конкретному классу.

есть мысли как это можно немного переиграть?


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
GremlinProg
Дата 12.12.2012, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106




M
GremlinProg
Тема перемещена из раздела C/C++: Системное программирование и WinAPI



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
borisbn
Дата 12.12.2012, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(ZC1989 @  12.12.2012,  08:02 Найти цитируемый пост)
 memset( &b, 0, sizeof(b) );
        memcpy( &b, &_var, sizeof(b) );

sizefo( b ) равен размеру указателя, а не выделенной памяти


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ZC1989
Дата 12.12.2012, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



borisbn, по поводу буфера я не думал пока, как его лучше хранить, это пробный вариант... но и кстати, в случае char и bool он выделяет 1 байт, а когда передаю int - 4... 
суть не в этом, 
можно что нибудь получше придумать с запоминанием типа переменной?

Добавлено через 12 минут и 52 секунды
у меня была мысль сделать класс шаблоном

но есть касяк:
Код

template <class typedata>
class DS_VAR {
public:
    DS_VAR <ТИП ЭЛЕМЕНТА ЕЩЕ НЕ ИЗВЕСТЕН>*_next;


точно такое же возникает при объявлении ссылки на первый элемент, которая при отсутствии элементов просто нулевая... 
а получается что нужно заранее указать ее тип


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
xvr
Дата 12.12.2012, 13:30 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Язык С++ - это язык со статической типизацией (даже с учетом шаблонов - они раскрываются в статические типы compile-time). Вы же пытаетесь сделать интерпретатор с run-time динамической типизацией (насколько я понял). Т.е. никакие конструкции С++ вам в этом не помогут  smile Так что делайте класс для хранения динамически типизированного значения, и уже их собирайте в стеки (или во что вам будет угодно  smile )

PM MAIL   Вверх
ZC1989
Дата 12.12.2012, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



xvr, ну это слишком гибко, круто конечно, но я даже не думал делать так. мысль то была что в скриптовом языке будут указываться типы переменных, но сам так называемый "стек" хотел сделать более гибким. 

можно было бы сделать шаблонный класс, но тогда пришлось бы для каждого типа данных делать свой список. а я как раз хотел что бы этого делать не приходилось... и список был общий.... даже, бонально, на поиске имени переменной было бы проще. нежели перебирать несколько списков. 

хотя, с другой стороны ты навел на мысль сделать сложнее) но проще использовать)

погуглю, попробую, отпишусь)


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
borisbn
Дата 12.12.2012, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



ZC1989, посмотри в эту сторону


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ZC1989
Дата 12.12.2012, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



borisbn, давно еще читал про эту библиотеку, но совершенно забыл!
уже читаю) спасибо)


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
xvr
Дата 12.12.2012, 16:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(ZC1989 @  12.12.2012,  13:55 Найти цитируемый пост)
можно было бы сделать шаблонный класс,

Вот этого как раз делать не надо. Одна и та же переменная в динамическом скриптовом языке может в разное время хранить данные разных типов. Никакой шаблон этого делать не умеет. Нужен всего один С++ тип для любого значения (и не только для переменных) - динамически типизированное значение.

Например -
Код

var a=123;
...
a="String";
Какого типа должна быть 'a' ?

PM MAIL   Вверх
artsb
Дата 12.12.2012, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



ZC1989, если вы знакомы с C++Builder или Delphi, то можете покопаться в классе TVariant. Вроде бы, это как раз то, про что говорит 
xvr.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
ZC1989
Дата 13.12.2012, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



artsb, с++ булдер и делфи не особо знаю, так, абстрактно... поэтому их тонкостей я не знаю... в основном пользуюсь Си наследованными языками...


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
xvr
Дата 13.12.2012, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(ZC1989 @  13.12.2012,  00:18 Найти цитируемый пост)
поэтому их тонкостей я не знаю...

Ну вообще то TVariant это не 'их тонкости'. Это всего лишь обвертка над VARIANT, который в свою очередь пришел из мира ActiveX, а он [ActiveX] и был придуман для поддержки реализации скриптовых языков. Почитайте в MSDN (хотя в вашем случае это наверное будет чересчур)

PM MAIL   Вверх
Result
Дата 13.12.2012, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 15.5.2011

Репутация: 2
Всего: 5



Еще можно посмотреть как в Пайтоне представлены переменные И объекты, и возможно позаимствовать подход в своих наработках.

PM   Вверх
borisbn
Дата 14.12.2012, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(Result @  13.12.2012,  23:29 Найти цитируемый пост)
Еще можно посмотреть как в Пайтоне представлены переменные И объекты, и возможно позаимствовать подход в своих наработках.

Хммм... интересно...
Не подскажете, где именно посмотреть ? 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 14.12.2012, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(borisbn @  14.12.2012,  15:38 Найти цитируемый пост)
 где именно посмотреть ?  

borisbn, исходники доступны с главной страницы

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
2 Пользователей читают эту тему (2 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0911 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.