Von mehreren Teilimplementierungen einer abstrakten Basisklasse erben?

Ist es möglich, eine Reihe von zu habenTeilimplementierungen einer abstrakten Schnittstelle, und dannsammeln Diese Teilimplementierungen in aeinzelne konkrete Klasse durch Mehrfachvererbung?

Ich habe den folgenden Beispielcode:

#include <iostream>

struct Base
{
    virtual void F1() = 0;
    virtual void F2() = 0;
};

struct D1 : Base
{
    void F1() override { std::cout << __func__ << std::endl; }
};

struct D2 : Base
{
    void F2() override { std::cout << __func__ << std::endl; }
};

// collection of the two partial implementations to form the concrete implementation
struct Deriv : D1, D2
{
    using D1::F1; // I added these using clauses when it first didn't compile - they don't help
    using D2::F2;
};

int main()
{
    Deriv d;
    return 0;
}

Dies kann nicht mit den folgenden Fehlern kompiliert werden:

main.cpp: In function ‘int main()’:
main.cpp:27:11: error: cannot declare variable ‘d’ to be of abstract type ‘Deriv’
main.cpp:19:8: note:   because the following virtual functions are pure within ‘Deriv’:
main.cpp:5:18: note:    virtual void Base::F1()
main.cpp:6:18: note:    virtual void Base::F2()

Antworten auf die Frage(2)

Ihre Antwort auf die Frage