Здравствуйте знатоки!
я только начинаю изучать С++, поэтому позникают вопросы правильности применения тех или иных методов...
задача такая:
есть несколько типов данный. под типом (в данном контексте) подразумеваю родной тип С++ (или 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 писал с генератором и виртуальными методами...