|
|
|
фабрика
|
|||
|---|---|---|---|
|
#18+
модифицированный пример простой фабрики из Александреску: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. в модулях конкретных классов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 14:50 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Голенков Владимирмодифицированный пример простой фабрики из Александреску: ... А гарантия, что конструктор m_callbacks вызовется до m_callbacks.insert? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 15:26 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
В дельфях можно что-то подобное: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Кто знает, можно ли в C++ сделать подобное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 15:29 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
А гарантия, что конструктор m_callbacks вызовется до m_callbacks.insert? "мамой клянусь" :) на момент вызова метода объект CFactory уже создан и инициализорован, ровно как все его подобъекты, разве нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 15:35 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир А гарантия, что конструктор m_callbacks вызовется до m_callbacks.insert? "мамой клянусь" :) на момент вызова метода объект CFactory уже создан и инициализорован, ровно как все его подобъекты, разве нет? _instance является локальным объектом, создается который при входе в метод, но он является еще и статическим, значит создаваться он при входе не будет. А будет, значит, он создаватья когда и другие глобальные объекты. Создаваться это у нас - выделение памяти и вызов конструктора. Также, registered глобальный - выделение памяти и вызов функции. Получается, что они равноправны. Так я думаю. ПС: И все таки скребут кошки на счет статика в статике... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 15:56 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Голенков Владимирмодифицированный пример простой фабрики из Александреску: А где CFactory::Create (как нужный объект получить)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 15:58 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Makar4ikВ дельфях можно что-то подобное: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Кто знает, можно ли в C++ сделать подобное? Нарпимер, изменив массив на массив функций создания класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 16:02 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Makar4ikВ дельфях можно что-то подобное: .... Кто знает, можно ли в C++ сделать подобное? Нельзя - "class of " нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 16:05 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Barlone Голенков Владимирмодифицированный пример простой фабрики из Александреску: А где CFactory::Create (как нужный объект получить)? В мапе ищещь, отдаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 16:06 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
AkhНарпимер, изменив массив на массив функций создания класса.Ну так-то конечно. Только эти функции еще написать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 16:11 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
_instance является локальным объектом, создается который при входе в метод, но он является еще и статическим, значит создаваться он при входе не будет. "Конструктор локального статического объекта вызывается один раз при первом выполнении инструкции, содержащей определение объекта." Страуструп, C++ 3е издание, [10.4.8] "Этот подход основан на том, что C++ гарантирует: локальные статические объекты инициализируются в первый раз, когда определение объекта встречается при вызове этой функции." Мейерс, Эффективное использование C++ 3е издание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 16:40 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир _instance является локальным объектом, создается который при входе в метод, но он является еще и статическим, значит создаваться он при входе не будет. "Конструктор локального статического объекта вызывается один раз при первом выполнении инструкции, содержащей определение объекта." Страуструп, C++ 3е издание, [10.4.8] "Этот подход основан на том, что C++ гарантирует: локальные статические объекты инициализируются в первый раз, когда определение объекта встречается при вызове этой функции." Мейерс, Эффективное использование C++ 3е издание Да, признаю. Много в С++ оговорок, которые логически трудно/невозможно вывести. ПС: Подход очень хороший. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 16:59 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
в приведенном мной примере функция CFactory::Instance() не должна быть inline ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2006, 10:28 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Можно тут "крупному" специалисту встрять? Что касается полиморфной фабрики жестко связянной с некоторой иерархией классов, как того хотел автор топика. мне кажется это не совсем правильным 1) иногда бывает необходимо производить обекты классов не всего дерева насладования, а только его поддерева 2) и это у меня очень часто бывало за разными значениями ключа кроется одинаковые производящие функции Например OCI от oracle 8 закрывали, ну возвращает мне из описания таблицы отн тип данных char, varchar2 или другой символьный тип а в С++ все равно char[] заводить Ну а что касается представленной фабрики не вижу никаких преимуществ перед совместным с Akh'ом творением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2006, 12:30 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
blindedМожно тут "крупному" специалисту встрять? Что касается полиморфной фабрики жестко связянной с некоторой иерархией классов, как того хотел автор топика. мне кажется это не совсем правильным 1) иногда бывает необходимо производить обекты классов не всего дерева насладования, а только его поддерева 2) и это у меня очень часто бывало за разными значениями ключа кроется одинаковые производящие функции Например OCI от oracle 8 закрывали, ну возвращает мне из описания таблицы отн тип данных char, varchar2 или другой символьный тип а в С++ все равно char[] заводить Ну а что касается представленной фабрики не вижу никаких преимуществ перед совместным с Akh'ом творением Я вижу преимущество в гарантии инициализации всех данных фабрики в момент первой записи информации о классе. На счет не правельности, не понял смысл ссылок на деревья классов (т.к. не полносьтю представляю определение полиморфных фабрик). Полиморфная фабрика, как я себе понял, это фабрика, имеющая/предоставляющая информацию о средстве получения информации о вариантах создания объекта. Это средство информации, предоставляет функции работы над классами тоже по какому-то идентификатору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2006, 12:43 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34047877&tid=2030307]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
412ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 712ms |

| 0 / 0 |
