You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
В текущей парадигме, чтобы добавить то или иное поведение классу, который нельзя менять, используются глобальные функции. Типичный пример - это строковые алгоритмы в Boost вроде boost::to_lower_copy(). Проблема с этими функциями - они все глобальны, их сложно искать, и цепочные вызовы таких функций вылгядят как f(g(x)) вместо x.g().f(). Хочется получать то же, что имеют разработчики C#, где методы расширения реализуются специальным ключевым словом.
Я предлагаю в С++ сделать то же самое вплоть до синтаксиса, то есть
apolukhin
added
На паузе
Международный комитет холодно встретил идею, нужно переосмыслить идею и вернуться к ней позднее
and removed
На паузе
Международный комитет холодно встретил идею, нужно переосмыслить идею и вернуться к ней позднее
labels
Mar 19, 2021
Точнее, Bjarne Stroustrup и Herb Sutter занимаются UFCS / "оператор точка" https://wg21.link/p0251 , см обсуждение в #100
Предложение только на методы расширения, без дополнительных сложностей с оператором точка, лишено множества проблем, обнаруженных в комитете. Можно попробовать взяться, но будет очень тяжело.
Перенос предложения: голоса +5, -1
Aвтор идеи: mezastel
В текущей парадигме, чтобы добавить то или иное поведение классу, который нельзя менять, используются глобальные функции. Типичный пример - это строковые алгоритмы в Boost вроде boost::to_lower_copy(). Проблема с этими функциями - они все глобальны, их сложно искать, и цепочные вызовы таких функций вылгядят как f(g(x)) вместо x.g().f(). Хочется получать то же, что имеют разработчики C#, где методы расширения реализуются специальным ключевым словом.
Я предлагаю в С++ сделать то же самое вплоть до синтаксиса, то есть
Ключевое слово
this
тут помечает функцию как функцию-расширение, так что ее можно использоватьmy_string.to_lower_copy()
std::to_lower_copy(my_string)
Второй способ нужен в случае коллизий между member functions и extension functions.
The text was updated successfully, but these errors were encountered: