Покритикуйте реализацию табличных методов
От: BLo Россия  
Дата: 19.11.08 13:01
Оценка:
Собственно вот здесь. Выскажите свое мнение. У меня это используется: как фабрика объектов, при разборе mft аттрибутов записи, при разборе xml файла, и везде где нужно избавится от жуткого switch, естественно в меру.
Я давно уже пользовался Loki::Factory, но невозможность задать более одной сигнатуры меня напрягала, вот и было написано это.
Re: Покритикуйте реализацию табличных методов
От: Alexander G Украина  
Дата: 19.11.08 13:51
Оценка:
Здравствуйте, BLo, Вы писали:

BLo>Собственно вот здесь. Выскажите свое мнение. У меня это используется: как фабрика объектов, при разборе mft аттрибутов записи, при разборе xml файла, и везде где нужно избавится от жуткого switch, естественно в меру.


Вы заполнение таблицы в compile-time принципиально не хотите ? или не осилили ?

Если допустим программе известно n-надцать атрибутов mft, то они всегда те же для всех записей, нет ?
Русский военный корабль идёт ко дну!
Re[2]: Покритикуйте реализацию табличных методов
От: BLo Россия  
Дата: 19.11.08 14:05
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Вы заполнение таблицы в compile-time принципиально не хотите ? или не осилили ?

Даже не пытался сделать это в compile-time, Вы наталкнули меня взглянуть на мою реализацию под другим углом — Спасибо!!!

AG>Если допустим программе известно n-надцать атрибутов mft, то они всегда те же для всех записей, нет ?

Согласен, соответственно и заполнить таблицу в compile-time будет логичнее. Спасибо!!!

Попробую добавить возможность заполнения в compile-time.
Re[3]: Покритикуйте реализацию табличных методов
От: Alexander G Украина  
Дата: 19.11.08 14:34
Оценка:
Здравствуйте, BLo, Вы писали:

BLo>Попробую добавить возможность заполнения в compile-time.


Мне кажется, что это, если вдруг получится, будет не "возможность", а отдельная реализация.

Указатель на функцию вполне может быть шаблонным параметром, если функция с внешним связыванием. Так, template<class D, D d> может заполнятся как <BOOST_TYPEOF(F), F>, где F — функция.
Ещё агрегатная инициализация типа x = {...} может проходить во время статической инициализации, а число элементов может выводится даже если {} в рантайме. Тут вот http://rsdn.ru/Forum/message/3134706.1.aspx
Автор: Alexander G
Дата: 12.10.08
 я применял подобное.

Кстаи а чем switch не угодил ?
Русский военный корабль идёт ко дну!
Re[4]: Покритикуйте реализацию табличных методов
От: BLo Россия  
Дата: 19.11.08 14:57
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Мне кажется, что это, если вдруг получится, будет не "возможность", а отдельная реализация.

Подумал. Согласен.

AG>Указатель на функцию вполне может быть шаблонным параметром, если функция с внешним связыванием. Так, template<class D, D d> может заполнятся как <BOOST_TYPEOF(F), F>, где F — функция.

AG>Ещё агрегатная инициализация типа x = {...} может проходить во время статической инициализации, а число элементов может выводится даже если {} в рантайме. Тут вот http://rsdn.ru/Forum/message/3134706.1.aspx
Автор: Alexander G
Дата: 12.10.08
 я применял подобное.

Вот это посмотрел, но пока мельком.

AG>Кстаи а чем switch не угодил ?

Поддержкой большого количества case'ов. По функции на вариант меня больше устравивает. Я использую tabular_method в меру, там где в switch три-четыре case, то нет смысла от него избавляться. Но вот когда вариантов 20 и с разной логикой, то пролистование этого switch напрягает. Еще, конечно, на меня повлияли различные книги. Еще если фабрику реализовывать с помощью switch, то получается она должна знать о всех объекта.
Re[5]: Покритикуйте реализацию табличных методов
От: Alexander G Украина  
Дата: 19.11.08 15:14
Оценка:
Здравствуйте, BLo, Вы писали:

BLo>Поддержкой большого количества case'ов. По функции на вариант меня больше устравивает. Я использую tabular_method в меру, там где в switch три-четыре case, то нет смысла от него избавляться. Но вот когда вариантов 20 и с разной логикой, то пролистование этого switch напрягает.

А никогда простой идеи не возникало:
switch(attribute)
{
case 0x010: ProcessStandardInformation(...); // вынесли в функцию
            break;
case 0x030: ProcessFileName(...); // вынесли в функцию
            break;
...

?

BLo>Еще, конечно, на меня повлияли различные книги.

Эта http://rsdn.ru/Forum/message/3011797.1.aspx
Автор: Alexander G
Дата: 04.07.08
?

BLo>Еще если фабрику реализовывать с помощью switch, то получается она должна знать о всех объекта.

IMHO рулят метаклассы + виртуальные конструкторы как это было Delphi, остальное — костыли.
Русский военный корабль идёт ко дну!
Re[6]: Покритикуйте реализацию табличных методов
От: BLo Россия  
Дата: 19.11.08 15:41
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>А никогда простой идеи не возникало:

AG>
AG>switch(attribute)
AG>{
AG>case 0x010: ProcessStandardInformation(...); // вынесли в функцию
AG>            break;
AG>case 0x030: ProcessFileName(...); // вынесли в функцию
AG>            break;
AG>...
AG>

AG>?
Т.е. Вы хотите скачать, что я ткнул "жирную" штуку туда где можно было бы обойтись штукой и попроще. Типа "Горе от ума"?.

BLo>>Еще если фабрику реализовывать с помощью switch, то получается она должна знать о всех объекта.

AG>IMHO рулят метаклассы + виртуальные конструкторы как это было Delphi, остальное — костыли.
Почитаю, вспомню, можно и обсудить будет.
Re[6]: Покритикуйте реализацию табличных методов
От: Were  
Дата: 19.11.08 15:44
Оценка: :))
Здравствуйте, Alexander G, Вы писали:

BLo>>Еще если фабрику реализовывать с помощью switch, то получается она должна знать о всех объекта.

AG>IMHO рулят метаклассы + виртуальные конструкторы как это было Delphi, остальное — костыли.
Рулят танковые клинья и ковровое бомбометание


Простите за недержание )
Re[7]: Покритикуйте реализацию табличных методов
От: Alexander G Украина  
Дата: 19.11.08 15:48
Оценка:
Здравствуйте, BLo, Вы писали:

BLo>Т.е. Вы хотите скачать, что я ткнул "жирную" штуку туда где можно было бы обойтись штукой и попроще. Типа "Горе от ума"?.


Именно.

Причём как бы не получилось что преимуществ у хитрого решения против switch никаких.
Русский военный корабль идёт ко дну!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.