c++ - 允许派生类从基础抽象类实现单个纯虚函数

标签 c++ inheritance abstract-class

有没有可能有一个带有一些纯虚函数的抽象基类:

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 中。

最佳答案

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

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

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

关于c++ - 允许派生类从基础抽象类实现单个纯虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218866/

相关文章:

c++ - 你如何为具有继承的 C++ 类编写 C 包装器

c++ - 如何在运行时决定将哪个派生类用作 C++ 中的私有(private)类成员?

c++ - Qt 鼠标事件在 QGraphicsScene 中不起作用

c# - 如何使用包裹在 C++ 中的 COM 接口(interface)部署 C# 库?

a = b .* c 的 C++ 运算符,将指向 a、b 和 c 对象的指针作为输入

c++ - 我在使用 WaitForDebugEvent EXCEPTION_DEBUG_EVENT 时遇到问题

c++ - 实现后期多态性的最佳方式

java - 如何限制类列表仅包含类的子类(可能是抽象类)

java - 基于另一个抽象类的子类创建抽象类的子类,而不知道它们的类型

java - 抽象类构造函数初始化