Добрый день!
Прошу прошения, если что не так, ведь это первая тема, будем, так сказать, учиться по ходу. Я уже давненько не брался за программирование на С++ (аж с 3–ого курса института), но тут судьба заставила и столкнулся с проблемой, суть которой в том что нужно по ходу программы определить структуру. Опишу подробнее:
У меня есть lib – файл, поставляемый разработчиком, и функции из него принимают в качестве параметра структуру, о которой до некоторого момента я ничего не знаю, но по её имени могу определить. При этом есть два варианта:
1. Я про неё узнаю до момента компиляции (определяю в коде);
2. Я про неё узнаю после сборки проекта (пользователь вводит имя).
После определения имени структуры я могу определить количество её членов, их тип и названия (хотя название особого смысла не несёт). Так вот каким образом я могу сгенерить эту структуру для передачи в функцию.
Заранее благодарю, за ответы.
Re: Каким образом можно динамически определить структуру?
Здравствуйте, UncleFox, Вы писали:
UF>Добрый день! UF>Прошу прошения, если что не так, ведь это первая тема, будем, так сказать, учиться по ходу. Я уже давненько не брался за программирование на С++ (аж с 3–ого курса института), но тут судьба заставила и столкнулся с проблемой, суть которой в том что нужно по ходу программы определить структуру. Опишу подробнее: UF>У меня есть lib – файл, поставляемый разработчиком, и функции из него принимают в качестве параметра структуру, о которой до некоторого момента я ничего не знаю, но по её имени могу определить. При этом есть два варианта: UF>1. Я про неё узнаю до момента компиляции (определяю в коде); UF>2. Я про неё узнаю после сборки проекта (пользователь вводит имя). UF>После определения имени структуры я могу определить количество её членов, их тип и названия (хотя название особого смысла не несёт). Так вот каким образом я могу сгенерить эту структуру для передачи в функцию.
UF>Заранее благодарю, за ответы.
Гыгы, вам в жабу. В с++ такими вещами не занимаются
Re[2]: Каким образом можно динамически определить структуру?
От:
Аноним
Дата:
05.04.07 14:31
Оценка:
К сожалению, с джавой не знаком, а вот сделать надо
Re: Каким образом можно динамически определить структуру?
Здравствуйте, UncleFox, Вы писали:
UF>...Так вот каким образом я могу сгенерить эту структуру для передачи в функцию.
Для этого достаточно методом научного тыка исследовать платформо-зависимую реализацию расположения полей структуры в памяти, а по полученным релультатам написать код, который будет генерировать "вирутальную" структуру по её описанию.
Здравствуйте, ArtDenis, Вы писали:
AD>Для этого достаточно методом научного тыка исследовать платформо-зависимую реализацию расположения полей структуры в памяти
Имеется ввиду конечно общие принципы, по которым компилятор расставляет и выравнивает поля структуры
Здравствуйте, Garrrrr, Вы писали:
G>Гыгы, вам в жабу. В с++ такими вещами не занимаются
оффтоп, конечно, просто интересно — как такое делать в джаве? что, там можно в рантайме создать структуру и с ней работать как с обычной?
Re: Каким образом можно динамически определить структуру?
От:
Аноним
Дата:
05.04.07 18:16
Оценка:
продефайнить все варианты структуры и написать шаблонную функцию для работы с ней подойдет?
Re[2]: Каким образом можно динамически определить структуру?
Re[3]: Каким образом можно динамически определить структуру?
От:
Аноним
Дата:
06.04.07 05:52
Оценка:
Здравствуйте, UncleFox, Вы писали:
UF>К сожалению нет, вариантов сотни.
А что с этими структурами делать Вы собираетесь? Вариантов может быть и сотни, а кирпичиков раз-два и обчелся:
— целое число
— число с плавающей точкой
— время
— деньги
— контейнер этих структур
Re: Каким образом можно динамически определить структуру?
Здравствуйте, UncleFox, Вы писали:
UF>Добрый день! UF>Прошу прошения, если что не так, ведь это первая тема, будем, так сказать, учиться по ходу. Я уже давненько не брался за программирование на С++ (аж с 3–ого курса института), но тут судьба заставила и столкнулся с проблемой, суть которой в том что нужно по ходу программы определить структуру. Опишу подробнее: UF>У меня есть lib – файл, поставляемый разработчиком, и функции из него принимают в качестве параметра структуру, о которой до некоторого момента я ничего не знаю, но по её имени могу определить. При этом есть два варианта: UF>1. Я про неё узнаю до момента компиляции (определяю в коде); UF>2. Я про неё узнаю после сборки проекта (пользователь вводит имя). UF>После определения имени структуры я могу определить количество её членов, их тип и названия (хотя название особого смысла не несёт). Так вот каким образом я могу сгенерить эту структуру для передачи в функцию.
UF>Заранее благодарю, за ответы.
Каким образом вы узнаете кол-во членов структуры и их типы?
Re[2]: Каким образом можно динамически определить структуру?
Здравствуйте, Sm0ke, Вы писали: S>Каким образом вы узнаете кол-во членов структуры и их типы?
Дело в том, что структура, которую мне надо сгенерить — это описание таблицы, а ещё есть такая сущность как словарь, он по своей сути тоже является таблицей, но хранит данные о других таблицах, ключах и т.п..
Re[4]: Каким образом можно динамически определить структуру?
Здравствуйте, Аноним, Вы писали:
А>А что с этими структурами делать Вы собираетесь? Вариантов может быть и сотни, а кирпичиков раз-два и обчелся: А>- целое число А>- число с плавающей точкой А>- время А>- деньги А>- контейнер этих структур
На данный момент есть:
BTI_LONG;
BTI_ULONG
BTI_SINT;
BTI_WORD;
BTI_INT;
BTI_CHAR;
BTI_BYTE;
BTI_VOID;
+
структуры MONEY_STRUCT,DATE_STRUCT
Но это не исчерпывающий список
Re: Каким образом можно динамически определить структуру?
Здравствуйте, 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]: Каким образом можно динамически определить структуру?
<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 использовать?
Дак это уже детали...
Я просто привел схему, чтобы автор топика понял идею.