вопрос проектирования
От: Oleg A. Bachin Украина  
Дата: 21.01.04 10:19
Оценка:
Здравствуйте знатоки!

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

задача такая:
есть несколько типов данный. под типом (в данном контексте) подразумеваю родной тип С++ (или stl) плюс тип форматирования (выравнивать влево/вправо, значащие нули/нет и т.д..).

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

написал примерно следующее:


namespace item_type
{

template <typename T>
class base_item_type
{
        public:
                typedef T::value_type value_type;

                base_item_type(int length)
                {
                        
                };

                void write() {};
                void read() {};
        private:
                value_type m_value;
};

namespace format_style
{
        class C
        {
                public:
                        typedef std::string value_type;
        };
}

typedef base_item_type<format_style::C> C;

}


теперь хотелось бы ф-цию форматирования (а возможно и просто копирования в буффер) вынести в сообветствующих класс форматирования. для этого можно реализовать соответствующую ф-цию:


class C
{
        public:
                typedef std::string value_type;
                static void write(const std::ostream &os, 
                  const value_type &value, int length) {};
};


и вызывать соответственно:

base_item_type::write(){T::write(...)}


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

ладно, перейдем ко второй части...

теперь хотелось бы поиметь сооветствующий класс со списком таких элементов. (именованным списком).

что-то типа:

class file_001
{
  item_type::C item1(10);
  item_type::D item2(2);
...

}


вот тут то я и передумал насчет потоков...
захотелось (посмотрев auto_value из "Исходников") сделать автоматическое создание, плюс вычисление сдвига относительно начала буффера...
тогда двигаясь по списку (класс file_001 это элемент списка) мы можем легко читать/писать любой элемент (лучше даже назвать поле item1, item2 ...)

прийдя к такому выводу решил что можно конвертировать буффер на лету и позвращая
const value при чтении ну и перекрыть оператор =.

таким образом
value_type m_value;

не совсем уместно...

что думают знатоки по этому поводу? не сильно ли я навернул? может есть подобные примеры на посмотреть?

PS время не поджимает, так что пока экспериментировать могу вволю...

PSS были еще варианты с виртуальными методами read/write, но мне не понравилось...
такое я и на Delphi с пол-пинка напишу... поскольку учусь — хотелось бы на template. но если Вы считаете что так разумней — хотелось бы это услышать.

PSSS для самих классов собираюсь написать codegen... просто сами структуры уже есть в xml. под Delphi писал с генератором и виртуальными методами...
Best regards,
Oleg A. Bachin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.