Комментарии 8
Более лучшее решение — включать мозг при проектировании API. К сожалению, для C++ уже всё потрачено, в него добавлено чудовищное количество граблей. Включая подобные описанным в посте — из-за того что написать код который скопирует объект проще чем код который НЕ скопирует, это самое копирование вылезает тут и там.
Замечу что в C такой проблемы бы не было, там бы transform принимал указатель на функцию и void* userdata, не имея проблем с полиморфизмом.
-2
Не имя проблем с полиморфизмом и имея проблемы с void*.
+1
Замечу что в C такой проблемы бы не было, там бы transform принимал указатель на функцию и void* userdata, не имея проблем с полиморфизмом.
«нет обобщенного программирования — нет проблем»?
+2
Самое первое что в голову приходит — это std::ref. Прочитал заголовок, ожидал срыва покровов, думал мне расскажут почему его на самом деле нельзя использовать.
+1
Интересно что я на этой неделе прочитал статью, а потом воспроизвел проблему и пока думал в чем дело — вспомнил про статью. Удивительное совпадение, правда C++11 поддержки не было, пришлось решать другим способом.
0
не поделитесь?
0
Я уже не вспомню, но там сложнее было найти причину проблемы чем починить. У меня был большой объект и я решил его добавить operator() для того чтобы использовать этот же объект со стейтом как функтор для алгоритма и оказалось что весь это большой объект копируется. По моему я просто сделал маленький объект с operator() для которого копирование это ок.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как передать полиморфный объект в алгоритм STL