Curiously Recurring Template Patternを使用した静的ポリモーフィズムのメカニズムを理解しています。私はそれが何のために良いのか理解していません。
宣言された動機は次のとおりです。
速度のために、動的ポリモーフィズムの柔軟性をいくらか犠牲にしています。
しかし、次のような非常に複雑なことを気にする必要はありません。
template <class Derived>
class Base
{
public:
void interface()
{
// ...
static_cast<Derived*>(this)->implementation();
// ...
}
};
class Derived : Base<Derived>
{
private:
void implementation();
};
あなたができるとき:
class Base
{
public:
void interface();
}
class Derived : public Base
{
public:
void interface();
}
私の推測では、コードにセマンティックの違いはなく、単に C++ スタイルが優れているだけであるということです。
ハーブ・サッターはその中で次のように書いてExceptional C++ style: Chapter 18
います。
仮想機能を非公開にすることを好みます。
もちろん、なぜこれが良いスタイルなのか、徹底解説付き。
このガイドラインの文脈では、最初の例は良いです。
このvoid implementation()
例の関数は、クラスのカスタマイズを実行するためにここにあるため、仮想のふりをすることができます。したがって、それは非公開にする必要があります。
そして、2 番目の例は悪いです。
カスタマイズを実行するためにパブリック インターフェイスをいじるべきではありません。
私の質問は:
- 静的ポリモーフィズムについて何が欠けていますか? すべては優れた C++ スタイルに関するものですか?
- いつ使用する必要がありますか?いくつかのガイドラインは何ですか?