Стоит задача построить структуру, которая отражает некую объектную сущность. Допустим, есть состояния: State{ ST_USER_AUTHORIZED, ST_USER_IS_HUMAN, ST_USER_IS_OWNER; } // ну и так далее. MyStruct { ... }; Вот надо бы сделать нечто, работающее Только при ST_USER_AUTHORIZED, причем если USER_IS_HUMAN да еще и USER_IS_OWNER, то эта структура должна быть со свойством A, если же USER_IS_OWNER не выполняется, то теряем свойство A но добавляем B. Вроде бы просто, но состояний много и их комбинаций - тоже. Язык объктов не предусматривает - си По сути - здесь напрашивается такая штука как Factory - но как ее применить в данном отношении?
wsd Да я в курсе.) Может как-то есть способ множественного строительства? Ведь ООП - суть вариант понимания или восприятия процесса, сущности, системы. Я думаю, что размышляя с объектной точки зрения можно использовать функционал процедурного языка. Пусть некая сущность А есть ничто. Но создана из B по принципу C, который предусматривает метод M, чтобы изменить свойство P Вот скажите, в чем разница: //C.h Код (Text): typedef struct _B { int *P; } B; void M ( B, int ); ... Struct _A { B *b; }A; // Дальше, думаю понятно и Код (Text): -- На объектно-ориентированном языке package C is type B is record B :integer; end record; Type A is new B with NULL RECORD; procedure M ( b: IN OUT B'Class, I: IN Integer); end C; Вот я и прошу, может как-то можно в такой нотации паттерн фабрики реализовать? Объясню человеческим языком: Надо построить человека. У него дофига свойств, сами знаете. Но не просто построить, а учесть, что если ему пару тиков назад оторвали ухо, то он уже человек, но иной, без уха. Труп - тоже человек, и его тоже надо построить, задав ему те или иные свойства. Уровень детализации высокий. И все это заказчик просит без ООП.
osrootd так в чем проблема? Код (Text): struct A { int state; union { struct { ... x } state1; struct { ... y } state2; ... }; void foo(A* a) { switch (a->state) { case 1: .... a->state1->x ...
В С можно даже ООП имитировать (наследование и полиморфизм) через вложенные структуры с полями-указателями на функции. Кармак в исходниках Quake1/2/3 часто юзал. Правда в Doom3 уже перешел на чистый ООП. =) Но тут немного другое, как я понимаю. Если свойства еще и надо "терять", то, имхо, map ( propertyName, propertyValue ) будут адекватны, хотя и в ущерб производительности.
osrootd это всё изврат к примеру, если делать умный UDP, то получится TCP .. почему тогда сразу не заюзать TCP? твой случай аналогичный