Частные переопределения шаблона частных методов? (ОТВЕТ: NVI)

Какой принятый жаргон (если таковой имеется) для описания методов, которые должны вызываться только виртуально и из других методов в базе? Я иногда видел, что это называется обратным вызовом, но это, кажется, отклоняется от первоначального определения этого термина. Я даже не уверен, что это заслуживает того, чтобы называться шаблоном, но я пытаюсь быть более точным в комментировании своего кода. Спасибо за помощь!

// Abstract class.
class A {
public:
  void run() { while (call()) { /* ... */ } }
private:
  virtual bool call() = 0;
};

// Completion/specialization of A.
class B : public A {
private:
  // Standard term to indicate this pattern?
  bool call();
};

Сводка. Похоже, это называется шаблоном не-виртуального интерфейса, частным случаем шаблона метода шаблона. Спасибо Нику и Стивену за помощь!

4 ответа

Решение

Это иногда называют шаблоном "не виртуальный интерфейс" (или NVI). Он часто используется, когда реализация виртуальной функции должна варьироваться в зависимости от производных классов, но базовый класс должен контролировать, когда вызывается функция.

Например, базовый класс мог бы сделать другой вызов функции до или после виртуального вызова вместо того, чтобы сделать виртуальную функцию общедоступной и полагаться на переопределения, чтобы вызвать базовую реализацию самостоятельно (и в нужный момент!)

Я слышал образец, где у вас нет virtual функционирует в вашем интерфейсе как шаблон Non-Virtual Interface, NVI для краткости.

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

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

Другие вопросы по тегам