Добавление в стандарт возможности расширения типов

Darkpaladin2000
Darkpaladin2000

Немного кода:

class SomeClass {
    int _a, int _b;
};

extension SomeClass {
public:
    int sumOfFields() {
        return _a + _b;
    }
};

//main
SomeClass object;
auto res = object.sumOfFields();

Расширения позволят добавлять функциональность в классы стандартной библиотеки без наследования.

Но будут ограничения на изменение существующей функциональности:
1. Нельзя менять реализацию существующих методов и операторов
2. Расширение не имеет своих конструкторов и деструктора, следовательно не имеет своих свойств.
3. Из расширяемого класса нельзя вызывать методы расширения

Расширения (extensions) используются в Swift.

 

 

-4
рейтинг
4 комментария
Игорь Шаповал

Это похоже на partial class в С#. Было б классно если добавили.

Игорь Шаповал
Alexey Kreschuk

В приведённом примере ломается изоляция: новый код может получить доступ к приватным членам класса. Если это починить, становится непонятно, зачем добавлять классу новые методы? Чем они лучше свободных функций?

Alexey Kreschuk
Дмитрий

Хотелось бы увидеть сценарии, где подобное усложнение языка необходимо или оправдано. На мой взгляд в некоторых случаях "расширение" типов может усложнить разбор кода.

Дмитрий
asschool

В сишарпе нет свободных функций

У нас есть, поэтому чтобы сделать расширение foo.bar() нужно стандартизировать uniform call syntax bar(foo) а не вот этот вот костыль

asschool
Обновлено 
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения