1

仮想的にのみ、およびベース内の他のメソッドから呼び出されることを意図したメソッドを説明するために受け入れられている専門用語(ある場合)は何ですか?これがコールバックと呼ばれるのを時々見ましたが、それはその用語の元の定義からかなり外れているようです。これがパターンと呼ばれるメリットがあるかどうかさえわかりませんが、コードのコメントをより正確にしようとしています。助けてくれてありがとう!

// 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

4 に答える 4

5

テンプレートメソッドパターンである可能性があります。

于 2010-07-22T14:01:03.513 に答える
3

これは、「非仮想インターフェイス」(またはNVI)パターンと呼ばれることもあります。これは、仮想関数の実装を派生クラス間で変更する必要がある場合によく使用されますが、基本クラスは、関数が呼び出されるタイミングを制御する必要があります。

たとえば、基本クラスは、仮想関数をパブリックにし、オーバーライドに依存して基本実装自体を(適切なタイミングで!)呼び出す代わりに、仮想呼び出しの前または後に別の関数呼び出しを行うことができます。

于 2010-07-22T14:01:27.020 に答える
1

virtual非仮想インターフェースパターン、略してNVIとして、インターフェースに機能がないパターンを聞いたことがあります。

他のコンテキストでは、これはテンプレートメソッドパターンと呼ばれます。ここで、run()テンプレートメソッドであり、派生クラスがジャンプしてギャップを埋めます。

于 2010-07-22T14:02:00.767 に答える
0

ええと...プライベートバーチャル?なぜ新しい用語を発明するのですか?これは言語構造であり、イディオムではありません。私の考えでは、パターンと呼ばれるほど面白くありません。

于 2010-07-22T14:01:05.727 に答える