Мне интересно, есть ли какой-нибудь сложный способ переопределить все методы класса таким же образом. Например, как разумно реализовать сложный шаблон в больших классах? Когда я получаю что-то вроде этого, например:Как автоматизировать методы переопределения?
class Foo{
virtual void work() = 0;
...
};
class FooLeaf : public Foo{
virtual void work() override{}
...
};
class FooComposite : public Foo{
std::vector<Foo *> foos;
virtual void work() override{
for (auto foo : foos){
foo->work();
}
}
...
};
Не проблема переопределить один метод. Но когда число методов растет, код получает огромное WET. Я имею в виду, что я не чувствую себя хорошо, скопировав цикл foreach, скажем, 10 методов.
Зачем вам копировать этот цикл N раз? если он делает то же самое в каждом классе, просто реализует его в базовом классе ... –
@EdS. Ты не сделал и не понял, что я имел в виду. Я спрашиваю, что мне делать, когда у меня есть несколько разных методов в Foo и вы хотите реализовать их по-другому в FooComposite. Как правило, они очень похожи друг на друга внутри FooComposite, когда они перегружены - для цикла и внутри метода из foos, хранящихся в векторе. – bartop
Бог благословит их - макросы * потрясающие * за этот материал ... ;-). –