Если у меня есть два абстрактных класса, определяющих чистую виртуальную функцию с одним и тем же именем, но разными, не -ковариантными возвращаемыми типами, как я могу вывести их и определить реализацию для обеих их функций?
#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 ()напрямую, нет ничего двусмысленного, поэтому я думаю, что это должно как-то работать, и я думаю, что я просто еще не нашел правильную нотацию. Или это невозможно, если так :Почему?