Каким образом можно динамически определить структуру?
От: UncleFox  
Дата: 05.04.07 14:09
Оценка:
Добрый день!
Прошу прошения, если что не так, ведь это первая тема, будем, так сказать, учиться по ходу. Я уже давненько не брался за программирование на С++ (аж с 3–ого курса института), но тут судьба заставила и столкнулся с проблемой, суть которой в том что нужно по ходу программы определить структуру. Опишу подробнее:
У меня есть lib – файл, поставляемый разработчиком, и функции из него принимают в качестве параметра структуру, о которой до некоторого момента я ничего не знаю, но по её имени могу определить. При этом есть два варианта:
1. Я про неё узнаю до момента компиляции (определяю в коде);
2. Я про неё узнаю после сборки проекта (пользователь вводит имя).
После определения имени структуры я могу определить количество её членов, их тип и названия (хотя название особого смысла не несёт). Так вот каким образом я могу сгенерить эту структуру для передачи в функцию.

Заранее благодарю, за ответы.
Re: Каким образом можно динамически определить структуру?
От: Garrrrr  
Дата: 05.04.07 14:19
Оценка:
Здравствуйте, UncleFox, Вы писали:

UF>Добрый день!

UF>Прошу прошения, если что не так, ведь это первая тема, будем, так сказать, учиться по ходу. Я уже давненько не брался за программирование на С++ (аж с 3–ого курса института), но тут судьба заставила и столкнулся с проблемой, суть которой в том что нужно по ходу программы определить структуру. Опишу подробнее:
UF>У меня есть lib – файл, поставляемый разработчиком, и функции из него принимают в качестве параметра структуру, о которой до некоторого момента я ничего не знаю, но по её имени могу определить. При этом есть два варианта:
UF>1. Я про неё узнаю до момента компиляции (определяю в коде);
UF>2. Я про неё узнаю после сборки проекта (пользователь вводит имя).
UF>После определения имени структуры я могу определить количество её членов, их тип и названия (хотя название особого смысла не несёт). Так вот каким образом я могу сгенерить эту структуру для передачи в функцию.

UF>Заранее благодарю, за ответы.


Гыгы, вам в жабу. В с++ такими вещами не занимаются
Re[2]: Каким образом можно динамически определить структуру?
От: Аноним  
Дата: 05.04.07 14:31
Оценка:
К сожалению, с джавой не знаком, а вот сделать надо
Re: Каким образом можно динамически определить структуру?
От: ArtDenis Россия  
Дата: 05.04.07 14:58
Оценка:
Здравствуйте, UncleFox, Вы писали:

UF>...Так вот каким образом я могу сгенерить эту структуру для передачи в функцию.


Для этого достаточно методом научного тыка исследовать платформо-зависимую реализацию расположения полей структуры в памяти, а по полученным релультатам написать код, который будет генерировать "вирутальную" структуру по её описанию.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[2]: Каким образом можно динамически определить структуру?
От: ArtDenis Россия  
Дата: 05.04.07 14:59
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Для этого достаточно методом научного тыка исследовать платформо-зависимую реализацию расположения полей структуры в памяти


Имеется ввиду конечно общие принципы, по которым компилятор расставляет и выравнивает поля структуры
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: Каким образом можно динамически определить структуру?
От: Аноним  
Дата: 05.04.07 15:32
Оценка:
Здравствуйте, UncleFox, Вы писали:


UF>Так вот каким образом я могу сгенерить эту структуру для передачи в функцию.


Динамические деревья.
Данные в XML формате.
Сериализация данных в общем...
Re[2]: Каким образом можно динамически определить структуру?
От: x-code  
Дата: 05.04.07 17:03
Оценка:
Здравствуйте, Garrrrr, Вы писали:

G>Гыгы, вам в жабу. В с++ такими вещами не занимаются

оффтоп, конечно, просто интересно — как такое делать в джаве? что, там можно в рантайме создать структуру и с ней работать как с обычной?
Re: Каким образом можно динамически определить структуру?
От: Аноним  
Дата: 05.04.07 18:16
Оценка:
продефайнить все варианты структуры и написать шаблонную функцию для работы с ней подойдет?
Re[2]: Каким образом можно динамически определить структуру?
От: UncleFox  
Дата: 06.04.07 05:06
Оценка:
К сожалению нет, вариантов сотни.
Re[3]: Каким образом можно динамически определить структуру?
От: Аноним  
Дата: 06.04.07 05:52
Оценка:
Здравствуйте, UncleFox, Вы писали:

UF>К сожалению нет, вариантов сотни.

А что с этими структурами делать Вы собираетесь? Вариантов может быть и сотни, а кирпичиков раз-два и обчелся:
— целое число
— число с плавающей точкой
— время
— деньги
— контейнер этих структур
Re: Каким образом можно динамически определить структуру?
От: Sm0ke Россия ksi
Дата: 06.04.07 06:34
Оценка:
Здравствуйте, UncleFox, Вы писали:

UF>Добрый день!

UF>Прошу прошения, если что не так, ведь это первая тема, будем, так сказать, учиться по ходу. Я уже давненько не брался за программирование на С++ (аж с 3–ого курса института), но тут судьба заставила и столкнулся с проблемой, суть которой в том что нужно по ходу программы определить структуру. Опишу подробнее:
UF>У меня есть lib – файл, поставляемый разработчиком, и функции из него принимают в качестве параметра структуру, о которой до некоторого момента я ничего не знаю, но по её имени могу определить. При этом есть два варианта:
UF>1. Я про неё узнаю до момента компиляции (определяю в коде);
UF>2. Я про неё узнаю после сборки проекта (пользователь вводит имя).
UF>После определения имени структуры я могу определить количество её членов, их тип и названия (хотя название особого смысла не несёт). Так вот каким образом я могу сгенерить эту структуру для передачи в функцию.

UF>Заранее благодарю, за ответы.


Каким образом вы узнаете кол-во членов структуры и их типы?
Re[2]: Каким образом можно динамически определить структуру?
От: UncleFox  
Дата: 06.04.07 06:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Динамические деревья.

А>Данные в XML формате.
А>Сериализация данных в общем...

Всёравно не понятно каким образом дерево или хмл станет Struct {...};
Или я просто чего — то не догоняю?
Re[3]: Каким образом можно динамически определить структуру?
От: Аноним  
Дата: 06.04.07 07:11
Оценка:
UF>К сожалению нет, вариантов сотни.
В таком случае адресная арифметика вам в руки.
Re[2]: Каким образом можно динамически определить структуру?
От: UncleFox  
Дата: 06.04.07 07:41
Оценка:
Здравствуйте, Sm0ke, Вы писали:
S>Каким образом вы узнаете кол-во членов структуры и их типы?

Дело в том, что структура, которую мне надо сгенерить — это описание таблицы, а ещё есть такая сущность как словарь, он по своей сути тоже является таблицей, но хранит данные о других таблицах, ключах и т.п..
Re[4]: Каким образом можно динамически определить структуру?
От: UncleFox  
Дата: 06.04.07 07:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А что с этими структурами делать Вы собираетесь? Вариантов может быть и сотни, а кирпичиков раз-два и обчелся:

А>- целое число
А>- число с плавающей точкой
А>- время
А>- деньги
А>- контейнер этих структур

На данный момент есть:
BTI_LONG;
BTI_ULONG
BTI_SINT;
BTI_WORD;
BTI_INT;
BTI_CHAR;
BTI_BYTE;
BTI_VOID;
+
структуры MONEY_STRUCT,DATE_STRUCT

Но это не исчерпывающий список
Re: Каким образом можно динамически определить структуру?
От: sc Россия  
Дата: 06.04.07 08:06
Оценка: 3 (1)
Здравствуйте, UncleFox, Вы писали:

<skipped>

встроить интерпретатор языка с динамической типизацией (python, etc)?
Re[3]: Каким образом можно динамически определить структуру?
От: Sm0ke Россия ksi
Дата: 06.04.07 09:02
Оценка:
Здравствуйте, UncleFox, Вы писали:

UF>Здравствуйте, Sm0ke, Вы писали:

S>>Каким образом вы узнаете кол-во членов структуры и их типы?

UF>Дело в том, что структура, которую мне надо сгенерить — это описание таблицы, а ещё есть такая сущность как словарь, он по своей сути тоже является таблицей, но хранит данные о других таблицах, ключах и т.п..


Приведите минимальный код.
А то очень расплывчато получается...
Re[3]: Каким образом можно динамически определить структуру?
От: Аноним  
Дата: 06.04.07 09:16
Оценка:
Здравствуйте, UncleFox, Вы писали:

UF>Здравствуйте, Аноним, Вы писали:


А>>Динамические деревья.

А>>Данные в XML формате.
А>>Сериализация данных в общем...

UF>Всёравно не понятно каким образом дерево или хмл станет Struct {...};

UF>Или я просто чего — то не догоняю?

Ты слишком зациклен на статическом определении данных.
Твоя задача вообще говоря довольно стандартна.
Тебе надо передать данные с динамической структурой,
а не struct {...};
Способов как это сделать — вагон.
Например с помощью односвязных списков:
enum MyListType
{
   IntType,
   DoubleType,
   StringType,
};

struct MyList
{
  void *pData;  // указатель на элемент данных, хранимый в жанном узле
  MyListType dataType; // идентификатор типа
  MyBinTree *pNext; // указатель на следующий элемент списка.
 }


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

Принимающей стороне надо будет просто научиться работать с данными в таком формате.
Понятно, что это всего лишь схема, но таким образом твою задачу решить можно.
Re[4]: Каким образом можно динамически определить структуру?
От: sc Россия  
Дата: 06.04.07 09:21
Оценка:
Здравствуйте, Аноним, Вы писали:

<skipped>

А>Ты слишком зациклен на статическом определении данных.

А>Твоя задача вообще говоря довольно стандартна.
А>Тебе надо передать данные с динамической структурой,
А>а не struct {...};
А>Способов как это сделать — вагон.
А>Например с помощью односвязных списков:
А>
А>enum MyListType
А>{
А>   IntType,
А>   DoubleType,
А>   StringType,
А>};

А>struct MyList
А>{
А>  void *pData;  // указатель на элемент данных, хранимый в жанном узле
А>  MyListType dataType; // идентификатор типа
А>  MyBinTree *pNext; // указатель на следующий элемент списка.
А> }
А>


А>С помощью такой нехитрой структуры ты сможешь передавать упорядоченные коллекции данных

А>произвольного типа...

А>Принимающей стороне надо будет просто научиться работать с данными в таком формате.

А>Понятно, что это всего лишь схема, но таким образом твою задачу решить можно.

тогда может уж лучше boost::tuple использовать?
Re[5]: Каким образом можно динамически определить структуру?
От: Аноним  
Дата: 06.04.07 09:27
Оценка:
Здравствуйте, sc, Вы писали:

sc>тогда может уж лучше boost::tuple использовать?


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