|
|
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Можно ли сделать фабрику, которая создает объекты без их перебора в switch’е Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. Есть мысль сделать что-то такое (в зависимости от значения type срабатывет нужный инициализатор): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Может, есть решения получше? Намекните, где посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 17:41 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Делается статическая файбрика, куда прописываются функции на создание и удаление объектов. Посмотрите на этом форуме. Пару месяцев назад я этот вопрос задавал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 18:08 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
тынц. У меня в качестве аргумента выступает строка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 18:09 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
AkhДелается статическая файбрика, куда прописываются функции на создание и удаление объектов. Посмотрите на этом форуме. Пару месяцев назад я этот вопрос задавал. Хорошее решение - называется "полиморфные фабрики", только придется руками прописывать функции инициализации для каждого класса (см. первое письмо, код № 2). Как раз этого и хотелось бы избежать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 07:35 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
М-да а кто кроме тебя может проинициализировать фабрику? По-моему ты хочешь странного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 10:05 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Это похоже на то, как я тогда бился головой об стенку, пытаясь найти средства как найти в программе нужные мне объекты. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 10:20 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
JustVas AkhДелается статическая файбрика, куда прописываются функции на создание и удаление объектов. Посмотрите на этом форуме. Пару месяцев назад я этот вопрос задавал. Хорошее решение - называется "полиморфные фабрики", только придется руками прописывать функции инициализации для каждого класса (см. первое письмо, код № 2). Как раз этого и хотелось бы избежать. А чем вас не устраивают макросы от blinded? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 10:21 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
AkhА чем вас не устраивают макросы от blinded? Потому что это то же самое перечисление врукопашную. А вот готовое решение. Те же полиморфные фабрики, однако с саморегистрацией через статическую инициализацию. Код: 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 11:39 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
JustVasНарод! Покритикуйте, pls. тот же самый закат солнца в ручную (классы Int1, Int2). Минусы: - Инентификация класса по типу возложена на класс, а не на фабрику - Создание/инициализация объекта возложена на сам объект, а не на объект инициализации фабрики ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 11:52 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
У самого вопрос возник. Как говорит стандарт о том, есть ли установленный порядок инициализации указателей и создании классов? Т.е. есть гарантия, что Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 11:56 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Akh JustVasНарод! Покритикуйте, pls. тот же самый закат солнца в ручную (классы Int1, Int2). Минусы: - Инентификация класса по типу возложена на класс, а не на фабрику Иначе получится один большой switch, от которого и стараюсь избавиться. В этом же решении создание нового класса не ведет к необходимости изменения фабрики Akh- Создание/инициализация объекта возложена на сам объект, а не на объект инициализации фабрики Это хорошо, т.к. вызов нужного конструктора, чтение/запись и другие специфичные для класса действия лучше доверить самому классу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:03 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
AkhУ самого вопрос возник. Как говорит стандарт о том, есть ли установленный порядок инициализации указателей и создании классов? Т.е. есть гарантия, что Код: plaintext Код: plaintext В единице трансляции инициализация идет в той последовательности, как пишется. Правда, потом компоновщик может все перековеркать в зависимости от того, в какой последовательности стоят *.obj (хотя на этот момент стандарт ничего не говорит) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:09 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
JustVas Akh JustVasНарод! Покритикуйте, pls. тот же самый закат солнца в ручную (классы Int1, Int2). Минусы: - Инентификация класса по типу возложена на класс, а не на фабрику Иначе получится один большой switch, от которого и стараюсь избавиться. В этом же решении создание нового класса не ведет к необходимости изменения фабрики Akh- Создание/инициализация объекта возложена на сам объект, а не на объект инициализации фабрики Это хорошо, т.к. вызов нужного конструктора, чтение/запись и другие специфичные для класса действия лучше доверить самому классу 1. Фабрике можно передавать тип, она в вектор будет загонять структуру с типом и функцией инициализации. Потом поиском будет искать. Фабрику не надо будет изменять, свича не будет. 2. На счет вызова нужного конструктора, думаю, это должна делать сама фабрика по типу. 3. На счет чтения записи, не совсем понял про что вы, но этими делами должен заниматься сам конструктор. Т.е. Волки отдельно, овцы отдельно. Созданием объекта, объект заниматься не должен, этим должна заниматься фабрика с помощью дополнительного объекта. Инициализацияей себя, объект должен заниматься сам, т.к. это его дело, а не всякие посторонние объекты; он лучше знает, что ему делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:13 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
JustVas AkhУ самого вопрос возник. Как говорит стандарт о том, есть ли установленный порядок инициализации указателей и создании классов? Т.е. есть гарантия, что Код: plaintext Код: plaintext В единице трансляции инициализация идет в той последовательности, как пишется. Правда, потом компоновщик может все перековеркать в зависимости от того, в какой последовательности стоят *.obj (хотя на этот момент стандарт ничего не говорит) Если нет четкого ограничения, то плохо. Если бы было так, как я сказал, то создание вектора при первом запуске установке функции инициализации решало бы проблему с синхронизацией создание_списка-добавление_в_список. Да, кстати, глобальный A *a=NULL, по моему, инициализируется еще до запуска исполнияемого файла, т.к. уже лежит в нем. Так было в ассемблере, так, наверное, и в сях. Так что это еще вам один минус. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:25 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Akh 1. Фабрике можно передавать тип, она в вектор будет загонять структуру с типом и функцией инициализации. Потом поиском будет искать. Фабрику не надо будет изменять, свича не будет. 2. На счет вызова нужного конструктора, думаю, это должна делать сама фабрика по типу. 3. На счет чтения записи, не совсем понял про что вы, но этими делами должен заниматься сам конструктор. Т.е. Волки отдельно, овцы отдельно. Созданием объекта, объект заниматься не должен, этим должна заниматься фабрика с помощью дополнительного объекта. Инициализацияей себя, объект должен заниматься сам, т.к. это его дело, а не всякие посторонние объекты; он лучше знает, что ему делать. Возникает чувство, что мы слегка друг друга не понимаем. Я говорю не про классическую "голую" фабрику, а про "полиморфную". В ней каждый класс имеет свою "минифабрику", адрес которой записывается в "головной" фабрике. Задача "головной" фабрики - вызвать нужную "мини". Все это в "БандеЧетырех" есть, вот только не нравится, что инициализация массива "головной" фабрики вручную делается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:32 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
AkhДа, кстати, глобальный A *a=NULL, по моему, инициализируется еще до запуска исполнияемого файла, т.к. уже лежит в нем. Так было в ассемблере, так, наверное, и в сях. Так что это еще вам один минус. ;) Так и есть. А что в этом плохого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:37 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
JustVasВозникает чувство, что мы слегка друг друга не понимаем. Я говорю не про классическую "голую" фабрику, а про "полиморфную". В ней каждый класс имеет свою "минифабрику", адрес которой записывается в "головной" фабрике. Задача "головной" фабрики - вызвать нужную "мини". Все это в "БандеЧетырех" есть, вот только не нравится, что инициализация массива "головной" фабрики вручную делается Большой звиняй тогда. А я то все думаю, что за полиморфность... Может стоит попробовать реализовать фабрики классов внутри головной фабрики, путем использования в головной вектор векторов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:38 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
JustVas AkhДа, кстати, глобальный A *a=NULL, по моему, инициализируется еще до запуска исполнияемого файла, т.к. уже лежит в нем. Так было в ассемблере, так, наверное, и в сях. Так что это еще вам один минус. ;) Так и есть. А что в этом плохого? Тогда надо делать головной вектор динамически, при первом вызове функции добавления в фабрику. Не будет проблем с тем, что бы он создавался первым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:41 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Тогда надо делать головной вектор динамически, при первом вызове функции добавления в фабрику. Не будет проблем с тем, что бы он создавался первым. Мейерс предлагал локальный статический объект в функции, возвращающей на него ссылку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:46 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир Тогда надо делать головной вектор динамически, при первом вызове функции добавления в фабрику. Не будет проблем с тем, что бы он создавался первым. Мейерс предлагал локальный статический объект в функции, возвращающей на него ссылку Хитро. Придумают же! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:52 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир Тогда надо делать головной вектор динамически, при первом вызове функции добавления в фабрику. Не будет проблем с тем, что бы он создавался первым. Мейерс предлагал локальный статический объект в функции, возвращающей на него ссылку Стоп! А нафиг, если этот вектор все равно в классе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:53 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Стоп! А нафиг, если этот вектор все равно в классе? это просто техника решения проблем порядка инициализации статических нелокальных объектов, каковым представляется фабрика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 13:25 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир Стоп! А нафиг, если этот вектор все равно в классе? это просто техника решения проблем порядка инициализации статических нелокальных объектов, каковым представляется фабрика В моем варианте указатель на вектор содержится в фабрике, у Мейерса, я так понимаю, он содержится в дополнительном локальном классе. Какие здесь плюсы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 13:34 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
В моем варианте указатель на вектор содержится в фабрике, у Мейерса, я так понимаю, он содержится в дополнительном локальном классе. Какие здесь плюсы? чо-то я Вас запутал.. есть фабрика - глобальный объект некого класса, синглтон если желаете внутри у него м.б. вектор или мэп, не суть у него есть интерфейс: зарегистрировать функцию создания объекта некого класса и создать объект из ранее зарегистрированных типов ну собственно и вылезает проблема инициализации фабрики перед первым ее использованием, которая решается как я написал если я что недопонял, извините ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 13:45 |
|
||
|
фабрика
|
|||
|---|---|---|---|
|
#18+
Голенков Владимирчо-то я Вас запутал.. Да похоже на то. Фабрику я тоже такую же имел ввиду. Можно разжевать следующее?: ;) Мейерс предлагал локальный статический объект [чего?] в функции [какой?], возвращающей на него [кого?] ссылку. А то у меня несколько вариантов (про инициализацию вектора, запуск функции и, [о, боже!] способ добавления в фабрику) и пытаясь куда-то это присобачить, крыша едет. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 13:58 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=330&tid=2030307]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 381ms |

| 0 / 0 |
