Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Функции (методы) расширения #30

Open
apolukhin opened this issue Mar 12, 2021 · 2 comments
Open

Функции (методы) расширения #30

apolukhin opened this issue Mar 12, 2021 · 2 comments
Labels
Помощь советом Идея прорабатывается другими участниками международного коммитета

Comments

@apolukhin
Copy link
Member

Перенос предложения: голоса +5, -1
Aвтор идеи: mezastel

В текущей парадигме, чтобы добавить то или иное поведение классу, который нельзя менять, используются глобальные функции. Типичный пример - это строковые алгоритмы в Boost вроде boost::to_lower_copy(). Проблема с этими функциями - они все глобальны, их сложно искать, и цепочные вызовы таких функций вылгядят как f(g(x)) вместо x.g().f(). Хочется получать то же, что имеют разработчики C#, где методы расширения реализуются специальным ключевым словом.

Я предлагаю в С++ сделать то же самое вплоть до синтаксиса, то есть

namespace std
{
  static std::string to_lower_copy(this string s)
  {
    ...
  }
}

Ключевое слово this тут помечает функцию как функцию-расширение, так что ее можно использовать

  • Естественным путем, т.е. my_string.to_lower_copy()
  • Статическим путем, т.е. std::to_lower_copy(my_string)

Второй способ нужен в случае коллизий между member functions и extension functions.

@apolukhin
Copy link
Member Author

apolukhin commented Mar 12, 2021

yndx-antoshkka, 5 декабря 2016, 13:51
Этим уже занимаются Bjarne Stroustrup и Herb Sutter: https://wg21.link/p0251

@apolukhin apolukhin added the Помощь советом Идея прорабатывается другими участниками международного коммитета label Mar 12, 2021
@apolukhin apolukhin added На паузе Международный комитет холодно встретил идею, нужно переосмыслить идею и вернуться к ней позднее and removed На паузе Международный комитет холодно встретил идею, нужно переосмыслить идею и вернуться к ней позднее labels Mar 19, 2021
@apolukhin
Copy link
Member Author

Точнее, Bjarne Stroustrup и Herb Sutter занимаются UFCS / "оператор точка" https://wg21.link/p0251 , см обсуждение в #100

Предложение только на методы расширения, без дополнительных сложностей с оператором точка, лишено множества проблем, обнаруженных в комитете. Можно попробовать взяться, но будет очень тяжело.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Помощь советом Идея прорабатывается другими участниками международного коммитета
Projects
None yet
Development

No branches or pull requests

1 participant