частные переопределения шаблона частных методов? (ОТВЕТ: NVI) - PullRequest
1 голос
/ 22 июля 2010

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

// 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();
};

Сводка : Это называется шаблоном Non-Virtual Interface , частным случаем Template MethodPattern .Спасибо Нику и Стивену за помощь!

Ответы [ 4 ]

5 голосов
/ 22 июля 2010
3 голосов
/ 22 июля 2010

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

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

1 голос
/ 22 июля 2010

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

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

0 голосов
/ 22 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...