![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Superklug |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Доброго времени суток!
По ходу реализации класса возник ряд вопросов. Надеюсь сможете помочь) 1. Наверно глупый вопрос, но как хранить массив байт? Допустим считал из потока N байт в массив char. Хранить *char и int? Хотелось бы чтобы была одна переменная.. Сделать свою структуру? Тогда наверно класс не очень удобен в использовании будет( Может можно использовать std::vector<char>? Если да, подскажите как лучше реализовать запись/чтение из потоков. 2. Вообще класс представляет собой что-то вроде Variant. Сейчас реализовано так: есть абстрактный класс Base, от него наследованы все возможные типы. Класс MyVariant содержит указатель на Base и методы вроде void asInt(int val) и int asInt(). Стоит ли объединить Base и MyVariant? Существующая реализация позволяет писать так:
Как реализовать возможность использования такого кода:
Вобщем нужно сделать использование класса как можно более удобным) Ситуация немного осложнена тем, что используются не только простые типы вроде int или string, но и массивы из MyVariant, и объекты - имя параметра и значение (std::map<std::string, MyVariant>) Т.е. возможны сложные конструкции вроде массив массивов... 3. Как можно реализовать копирование Base? Я добавил в Base виртуальную функцию Base* Clone(), которая реализована для каждого наследника. Не уверен, что это хорошее решение... Может можно как-то с помощью конструкторов сделать? 4. На Delphi есть класс TDateTime. Есть ли какая-нибудь альтернатива на C++? Нужна минимальная функциональность, но хочется более стандартизованное решение, поэтому свой класс писать не хочу. Может позже еще добавлю вопросы) P.S. Заранее спасибо за ответы и за ваше терпение! |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
1. vector<char> или другой подходящий контейнер.. инфо по пользованию ими можно найти на сайте cplusplus.com
2. Вот простой пример объекта динамического типа с хранением данных в юнионе : http://codepad.org/4ysVHFtg dдля допиливания 3. для полиморфного копирования Clone, для простого конструктор копий. Это сообщение отредактировал(а) mes - 24.4.2010, 00:39 |
|||
|
||||
| jonie |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
| Superklug |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
mes,
1. Т.е. использование vector - это нормальное решение? Хорошо) 2. Совсем простой вариант... У меня так не получится( Тут для каждого типа описана функция Set и switch для функции Get. Нельзя более гибко реализовать? У меня просто опыта работы с шаблонами немного(( 3. Значит использования Clone - классическое решение? Рад, что сам додумался)) Добавлено через 5 минут и 37 секунд Думал об этом.. Просто по большому счету нет разницы свой класс написать или использовать класс сторонней библиотеки) |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
я привел к тому, что простые типы можно выделить в отдельную категорию и обрабатывать просто, а для остальных уже делать клонайбл обьект.. т.е. union может выглядить так
ну а так : http://www.boost.org/doc/libs/1_42_0/doc/html/variant.html добавить нужный конструктор 4. http://www.codeproject.com/KB/datetime/datetimedisc.aspx Это сообщение отредактировал(а) mes - 24.4.2010, 10:01 |
|||
|
||||
| Superklug |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Ну реализация Variant от буста мне нравится) Только я не смог в ней разобраться. Отчасти поэтому и обратился к вам... Т.е. через шаблоны никак не получится? Если писать по функции на каждый тип, то будет много подобного кода. И добавление нового наследника от Base потребует дописания кучи методов.. Спасибо) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |