1

次のように、基本クラスの各派生クラスに、派生クラスの型を戻り値の型として持つ関数 (この場合は後置演算子) を実装させたいと考えています。

class A {
    virtual A operator++(int) =0;
}

class B : public A {
    B operator++(int);
}

これにより、次のようなエラーが生成されreturn type 'A' is an abstract classます。何をすべきか?私が理解している限り、後置は型への参照/ポインターではなく、実際の型を返す必要があります。

4

1 に答える 1

3

CRTP パターンの使用について:

template <typename T>
class A {
    virtual T operator++(int) =0;
};

class B : public A<B> {
    B operator++(int) override
    {
        // do something here
        return *this; 
    }
};

PS: @Marco A. が同様のアプローチでリンクを投稿したことを確認しました。完全を期すために回答を保持します。投票するようにプレッシャーを感じることはありません。

于 2014-11-28T00:53:14.163 に答える