Собственно вот здесь. Выскажите свое мнение. У меня это используется: как фабрика объектов, при разборе mft аттрибутов записи, при разборе xml файла, и везде где нужно избавится от жуткого switch, естественно в меру.
Я давно уже пользовался Loki::Factory, но невозможность задать более одной сигнатуры меня напрягала, вот и было написано это.
Здравствуйте, BLo, Вы писали:
BLo>Собственно вот здесь. Выскажите свое мнение. У меня это используется: как фабрика объектов, при разборе mft аттрибутов записи, при разборе xml файла, и везде где нужно избавится от жуткого switch, естественно в меру.
Вы заполнение таблицы в compile-time принципиально не хотите ? или не осилили ?
Если допустим программе известно n-надцать атрибутов mft, то они всегда те же для всех записей, нет ?
Здравствуйте, Alexander G, Вы писали:
AG>Вы заполнение таблицы в compile-time принципиально не хотите ? или не осилили ?
Даже не пытался сделать это в compile-time, Вы наталкнули меня взглянуть на мою реализацию под другим углом — Спасибо!!!
AG>Если допустим программе известно n-надцать атрибутов mft, то они всегда те же для всех записей, нет ?
Согласен, соответственно и заполнить таблицу в compile-time будет логичнее. Спасибо!!!
Попробую добавить возможность заполнения в compile-time.
Здравствуйте, 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, Вы писали:
AG>Мне кажется, что это, если вдруг получится, будет не "возможность", а отдельная реализация.
Подумал. Согласен.
AG>Указатель на функцию вполне может быть шаблонным параметром, если функция с внешним связыванием. Так, template<class D, D d> может заполнятся как <BOOST_TYPEOF(F), F>, где F — функция. AG>Ещё агрегатная инициализация типа x = {...} может проходить во время статической инициализации, а число элементов может выводится даже если {} в рантайме. Тут вот http://rsdn.ru/Forum/message/3134706.1.aspx
я применял подобное.
Вот это посмотрел, но пока мельком.
AG>Кстаи а чем switch не угодил ?
Поддержкой большого количества case'ов. По функции на вариант меня больше устравивает. Я использую tabular_method в меру, там где в switch три-четыре case, то нет смысла от него избавляться. Но вот когда вариантов 20 и с разной логикой, то пролистование этого switch напрягает. Еще, конечно, на меня повлияли различные книги. Еще если фабрику реализовывать с помощью switch, то получается она должна знать о всех объекта.
Здравствуйте, BLo, Вы писали:
BLo>Поддержкой большого количества case'ов. По функции на вариант меня больше устравивает. Я использую tabular_method в меру, там где в switch три-четыре case, то нет смысла от него избавляться. Но вот когда вариантов 20 и с разной логикой, то пролистование этого switch напрягает.
А никогда простой идеи не возникало:
switch(attribute)
{
case 0x010: ProcessStandardInformation(...); // вынесли в функциюbreak;
case 0x030: ProcessFileName(...); // вынесли в функциюbreak;
...
?
BLo>Еще если фабрику реализовывать с помощью switch, то получается она должна знать о всех объекта.
IMHO рулят метаклассы + виртуальные конструкторы как это было Delphi, остальное — костыли.
AG>?
Т.е. Вы хотите скачать, что я ткнул "жирную" штуку туда где можно было бы обойтись штукой и попроще. Типа "Горе от ума"?.
BLo>>Еще если фабрику реализовывать с помощью switch, то получается она должна знать о всех объекта. AG>IMHO рулят метаклассы + виртуальные конструкторы как это было Delphi, остальное — костыли.
Почитаю, вспомню, можно и обсудить будет.
Здравствуйте, Alexander G, Вы писали:
BLo>>Еще если фабрику реализовывать с помощью switch, то получается она должна знать о всех объекта. AG>IMHO рулят метаклассы + виртуальные конструкторы как это было Delphi, остальное — костыли.
Рулят танковые клинья и ковровое бомбометание
Здравствуйте, BLo, Вы писали:
BLo>Т.е. Вы хотите скачать, что я ткнул "жирную" штуку туда где можно было бы обойтись штукой и попроще. Типа "Горе от ума"?.
Именно.
Причём как бы не получилось что преимуществ у хитрого решения против switch никаких.