内向きなインターフェース

C++思いつきをメモ。C++ではprivateなインターフェースを作ることができます。以下のような感じです。

インターフェースと言うからには、接点は外部という既成概念がありそうですが、基底クラスと派生クラスの関係を類似クラスグループとして考える場合であっても、その間にインタフェースがあってよいと思います。いわば、内向きなインターフェースです。

internalInterface()は派生クラスに実装を任されている純粋仮想関数です。この関数は外部からコールできません。必ず基底クラスに呼び出しを実装する必要があります。上の例では、execute()関数をpublicにして、テンプレートメソッドパターンとほぼ同じ効能を得ようとする例です。commonCodeに書いてある共通のコードは派生クラスのインスタンスでも実行されますし、複数のインターフェースが存在しシーケンスがあるばあいはそれも基底クラスに記述できます。

execute()をオーバーライドできるようにすると厄介な問題になりそうですが、うまく使うと(共通化ができていない)既存コードとの併用なんかもできてしまいます。

コメントを残す