Где определить методы посетителя

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

Сначала я предположил, что было бы лучше иметь один файл .cpp, содержащий все определения для одного посетителя (один файл на посетителя). Этот подход приводит к тому, что каждый из файлов определения посетителя содержит довольно много директив #include как для посещаемых элементов, так и для любых вспомогательных функций, которые требуются каждому методу посещения.

В качестве альтернативы я могу определить методы посещения для каждого посетителя в файлах .cpp, содержащих определения для каждого элемента, при этом подходе уже есть необходимые директивы include (и поэтому они не повторяются), за исключением заголовка посетителей. Заголовок посетителя содержит только предварительные объявления каждого из элементов, поэтому преимущество этого подхода состоит в том, что количество включаемых заголовков в целом уменьшается.

elementa.cpp

#include ...
ElementA specific stuff.
#include ...

void ElementA::accept(Visitor &visitor) {
visitor.visit(*this);
}

void VisitorA::visit(ElementA &element)
{
//do cool stuff
}

void VisitorB::visit(ElementA &element)
{
//do other cool stuff
}

Мой вопрос: допустимо ли / обычно ли определять методы для нескольких классов в одном файле таким образом?

0

Решение

это высоко необычно помещать функции посетителя в класс элемента по двум причинам

  • Это означает, что код каждого посетителя рассредоточен. Общее правило заключается в том, что код класса находится в одном месте.
  • Вся цель Visitor состоит в том, чтобы отделить алгоритмы для элементов. Нет причин их переоценивать, помещая их в один и тот же .cpp
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]