是否可以有一个带有多个纯虚函数的抽象基类:

template <typename T, typename U = NullType, typename V = NullType>
class Functor {
public:
    virtual ~Functor() {}

    virtual T operator()() = 0;
    virtual T operator()(U arg1) = 0;
    virtual T operator()(U arg1, V arg2) = 0;
};

然后派生类仅实现这些功能之一?

例如
class Test : public Functor<void> {
public:
    void operator()() {
        std::cout << "Called Test::operator()" << std::endl;
    }
};

我有一个基本的Functor类的原因是为了可以将函子存储在 vector 中。

最佳答案

不,那不可能。如果您在T operator()(U)上调用了Test*却没有实现该怎么办?您最终必须让一个类实现所有这些类(或从实现每个类的一个或多个类继承)来实例化它。

您可以保留许多未定义的虚函数,但是如果这样做,您的类将无法实例化,因为它仍然是抽象的。您将不得不从另一个类继承它,并定义那些未定义的函数并将其实例化。

tl; dr:要实例化一个类,在其类层次结构中的所有虚函数必须具有一个定义。

10-01 01:56
查看更多