2

静的ポリモーフィズム (CRTP) を使用する場合、ポリモーフィック メソッドに名前を付ける良い方法はありますか?

template <class Derived> 
struct Base
{
    void interface()
    {
        // ...
        static_cast<Derived*>(this)->implementation();
        // ...
    }

    static void static_func()
    {
        // ...
        Derived::static_sub_func();
        // ...
    }
};

struct Derived : Base<Derived>
{
    void implementation();
    static void static_sub_func();
};

私の知る限り、インターフェイスと実装は同じ名前にすることはできません (それらが仮想である場合のように)。クラス階層が深い場合、それはちょっと厄介です。

何か良い対処法はないでしょうか?それとも私が間違っているだけですか?

4

2 に答える 2

2

私のアプローチは、継承を回避し (CRTP はかわいい感じですが)、代わりに集約を使用することです。クラス テンプレートはインターフェイスを提供し、実装と共にデリゲート クラスを提供します。次のようになります。

template <class Delegate>
struct Interface
{
    void do_something()
    {
        // ...
        delegate.do_something();
        // ...
    }

    Delegate delegate;
};

これには、デリゲート オブジェクトにコンストラクター引数を指定するのがより厄介であるという欠点がありますが、管理するのはそれほど難しくありません。

于 2012-11-30T13:18:00.703 に答える