Честно говоря, я не знаю, как задать этот вопрос, так что, пожалуйста, не злись :)C++ функция родительского возвращения ребенка
Во всяком случае, я хочу, чтобы иметь мутаторов (сеттеры) в моем классе, чтобы вернуть this
, чтобы разрешить jQuery-like a.name("something").address("somethingelse");
У меня есть родительский класс (Entity
) и несколько дочерних классов (Client, Agent etc.
). Мутаторы для большинства вещей наследуются от класса Entity
(например, имя или адрес), но они возвращают объект Entity
, поэтому я не могу вызывать на них клиентские мутаторы.
Другими словами:
// name mutator
Entity& Entity::name(const string& name) {
// [...] checks
_name = name;
return *this;
}
// budgetRange mutator
Client& Client::budgetRange(const long int& range) {
// [...] checks
_budgetRange = range;
return *this;
}
тогда, когда я называю его:
Client a; a.name("Dorota Adamczyk").budgetRange(50);
Компилятор (логически) говорит, что объект Entity не имеет ни одного члена budgetRange (потому что имя возвращает Entity, а не Клиентом).
Мой вопрос сейчас: как я мог реализовать что-то подобное? Я думал о перегрузке всех функций сущностей в childclasses, но это не было бы хорошо и было бы против идеи наследования :)
Спасибо заранее за ваши идеи: D
google также для 'method chaining' и' named parameter idiom', что вы делаете.Обратите внимание, что при наследовании от «клиента» ваш код снова сломается с использованием CRTP-решения ниже. – cheind