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 回答