|
|
|
Проблема
|
|||
|---|---|---|---|
|
#18+
У меня есть проблема: когда я возвращаю ссылку и указатель на объект, я предоставляю слишком многое пользователю функции. Например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Нужно как-то запретить использовать некоторые функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2004, 21:47 |
|
||
|
Проблема
|
|||
|---|---|---|---|
|
#18+
а вместо public: если поставить private: или protected: ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 08:09 |
|
||
|
Проблема
|
|||
|---|---|---|---|
|
#18+
Или имеется ввиду следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. на каждый указатель на объект делать AddRef и потом Release().? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 08:54 |
|
||
|
Проблема
|
|||
|---|---|---|---|
|
#18+
Если поставить private или protected, то доступ к этим функциям будет закрыт и для Nechto(для него должно быть всё видно)(если не будет friend, но если будет большое сущностей, которым должнен быть доступен operator(), это не подойдёт) Можно было бы использовать const Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Но const сюда не очень подходит по значению(скорее как раз operator() не изменяет Event) Что имелось ввиду: Nechto может оповещать о своём уничтожении, поэтому существует класс событие, в который можно добавлять обработчики события. Ещё у него есть operator() (вызывает все обработчики). В Nechto существует функция, возвращающая ссылку на Event, чтобы желающие могли добавить или удалить обработчик. Но желающим становится доступным и operator() =>они могут вызвать operator() и произойдёт ужас ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 16:18 |
|
||
|
Проблема
|
|||
|---|---|---|---|
|
#18+
Кажись, понял. На прошлой неделе была похожая проблема. Делал так: Создавал абстрактный(ну так получилось, для уверенности в детях) класс, который друг классу Event, и в нём использовал все нужные закрытые/прикрытые методы класса Event, потом сделал его родителем для всей кучи классов типа Nechto. Nechto, через свои методы вызывали методы родителя, которые в свою очередь по-дружески звали методы Event. Я правильно понял проблему? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2004, 10:25 |
|
||
|
Проблема
|
|||
|---|---|---|---|
|
#18+
Вообще так можно. Но немного не то, т.к. в этом случае доступ к закрытым членам получают те, кто наследуют от этого класса, а нужно закрывать доступ, при этом не всем, а только некоторым(и только доступ к членам не всех объектов типа Event, а только тех, указатели на которые возвращаются функциями Nechto) Ну можно так сделать: Код: plaintext 1. 2. 3. Но тогда Event* в RestrictedEvent* не преобразуется неявно, а, преобразовав обратно(уже можно неявно), мы получаем доступ к operator() Можно ещё так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Я бы может так и делал, если бы не проблемы: 1. надобность в выделении памяти для RestrictedEvent(если возвращать указатель, если возвращать по значению, этой проблемы не будет, но будет потеря гибкости) 2. а если мне надо заблокировать другую функцию, то всё переписывать хотя можно в конструкторе передавать массив указателей на запрещённае функции-члены и проверять всё время. Но если появится ещё класс с такой же проблемой, то что делать, непонятно. Т.е. переписывать. Хотелось бы как-нибудь шаблонами, чтобы restrict<Class, forbidden_func> Но как это сделать(и можно ли), не знаю <:80~ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2004, 17:57 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32462762&tid=2035203]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
72ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 222ms |
| total: | 394ms |

| 0 / 0 |
