Реализовать две функции с одинаковыми именами, но разными, не -ковариантными типами возвращаемого значения из-за нескольких абстрактных базовых классов

Если у меня есть два абстрактных класса, определяющих чистую виртуальную функцию с одним и тем же именем, но разными, не -ковариантными возвращаемыми типами, как я могу вывести их и определить реализацию для обеих их функций?

#include <iostream>

class ITestA {
    public:
        virtual ~ITestA() {};
        virtual float test() =0;
};

class ITestB {
    public:
        virtual ~ITestB() {};
        virtual bool test() =0;
};

class C : public ITestA, public ITestB {
    public:
    /* Somehow implement ITestA::test and ITestB::test */
};


int main() {
    ITestA *a = new C();
    std::cout << a->test() << std::endl; // should print a float, like "3.14"
    ITestB *b = dynamic_cast<ITestB *>(a);
    if (b) {
        std::cout << b->test() << std::endl; // should print "1" or "0"
    }
    delete(a);
    return 0;
}

Пока я не вызываю C ::test ()напрямую, нет ничего двусмысленного, поэтому я думаю, что это должно как-то работать, и я думаю, что я просто еще не нашел правильную нотацию. Или это невозможно, если так :Почему?

6
задан Tar 7 July 2012 в 03:09
поделиться