|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
Пытаюсь ограничить права на создание копий объектов, наделив этоим правом только специальный friend-класс, не создавая специальных clone-методов внутри классов иерархии. Если в иерархию внести STL-контейнер, все ломается, даже несмотря на дружбу с ним. Если раскомментить любую из строк, выделенных желтым, ловлю ошибку компиляции. Существует ли решение такой задачи? Нужно копать в сторону аллокаторов для вектора? Код: 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.
VS 2019 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
GCC Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2021, 21:56 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
AmKad Пытаюсь ограничить права на создание копий объектов, наделив этоим правом только специальный friend-класс, А по сути твоих классов: убери нафиг дружбу. Добавь в иерархию класс FileSystem и пусть он и только он занимается созданием и копированием объектов. И вообще, посмотри на реальность: папки содержат файлы, но файлы не лезут к папкам. Зачем тебе внутри файла дружить с папкой совершенно не понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 03:28 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
White Owl А по сути твоих классов: убери нафиг дружбу. Добавь в иерархию класс FileSystem и пусть он и только он занимается созданием и копированием объектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 07:35 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
AmKad, Судя по ошибкам GCC и VS копированием в векторе занимается не он сам а вспомогательные объекты. Значит friend class std::vector<File> бесполезен. А также скорее всего нет кроссплатформенного способа сделать френдами эти вспомогательные объекты. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 11:00 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
Я бы на вашем месте заменил vector на deque. Ему копирование не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 11:11 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Я бы на вашем месте заменил vector на deque. Ему копирование не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 13:02 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Судя по ошибкам GCC и VS копированием в векторе занимается не он сам а вспомогательные объекты. Anatoly Moskovsky А также скорее всего нет кроссплатформенного способа сделать френдами эти вспомогательные объекты. Модератор: Друзья. Без грубостей. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 13:53 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
a guest Требования к типам суваемым в контейнер описаны через использование функций `allocator_traits`, так что попробовать можно. Но не нужно. А по поводу "мается": как запретить основном коде, но разрешить создание копий в коде автотестов? Так, чтобы можно было с легкостью потом идентифицировать все места, где они создаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 15:04 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
AmKad, а какой вообще смысл в копировании File? Он либо только перемещаемый, как мьютекс, либо, если там рефкаунтер, то почему копирование не разрешить всем? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 15:15 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
AmKad как запретить основном коде, но разрешить создание копий в коде автотестов? если речь идет только о предоставлении доступа к закрытым сущностям для целей тестирования, то можно попробовать в основном коде классов объявить их члены как protected, в тестах отнаследоваться (без внесения дополнительной логики) и тестировать наследника ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 15:29 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
AmKad wroteкак запретить основном коде, но разрешить создание копий в коде автотестов? Если речь идёт исключительно о защите основного кода от дурака, то или условная компиляция, либо можно попробовать объявление конструктора как "deprecated" и игнорирование предупреждений где надо. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 15:45 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Если речь идёт исключительно о защите основного кода от дурака, то или условная компиляция, либо можно попробовать объявление конструктора как "deprecated" и игнорирование предупреждений где надо. a guest AmKad, а какой вообще смысл в копировании File? Он либо только перемещаемый, как мьютекс, либо, если там рефкаунтер, то почему копирование не разрешить всем? Cerebrum AmKad как запретить основном коде, но разрешить создание копий в коде автотестов? если речь идет только о предоставлении доступа к закрытым сущностям для целей тестирования, то можно попробовать в основном коде классов объявить их члены как protected, в тестах отнаследоваться (без внесения дополнительной логики) и тестировать наследника ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 16:20 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
Случайно добавил сообщение. Хотел отредактировать предыдущее. Теперь не знаю, как удалить это. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 16:25 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
AmKadДа, речь именно о защите основного кода от дурака в range-based циклах. Я в таких случаях просто отбиваю конструктор копирования. Не знаю зачем оно тебе в юнит-тестах. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 16:56 |
|
Управление копированием иерархии объектов через спец friend-класс с шаблонной функцией
|
|||
---|---|---|---|
#18+
Дуракоустойчивость кода - это замечательная тема для пятницы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 17:10 |
|
|
start [/forum/topic.php?fid=57&gotonew=1&tid=2017175]: |
0ms |
get settings: |
21ms |
get forum list: |
26ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
225ms |
get topic data: |
15ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
873ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 1196ms |
0 / 0 |