Ето примерен код на поведението, което бих искал да видя:
// Example program
#include <iostream>
#include <string>
#include <type_traits>
#include <vector>
class BaseA
{
public:
BaseA() { };
};
class BaseB
{
public:
BaseB() { };
};
class Derived1 : public BaseA
{
public:
Derived1() : BaseA() { };
};
class Derived2 : public BaseA, public BaseB
{
public:
Derived2() : BaseA(), BaseB() { };
};
int main()
{
std::vector<BaseA *> collection_of_As{
new Derived1{}, new Derived1{}, new Derived2{},
new Derived2{}, new Derived1{}, new Derived2{}
};
for (BaseA * Aptr: collection_of_As) {
BaseB * Bptr = dynamic_cast<BaseB *>(Aptr);
std::cout << std::boolalpha << (Bptr != std::nullptr) << std::endl;
}
return 0;
}
Но няма да се компилира, тъй като BaseA не е полиморфен, въпреки че е най-производният клас, който може да бъде. Разбирам защо това не работи, но все още имам нужда от това поведение. Има ли начин да накарам това да се компилира и да работи?
iostream
иvector
в горната част на този файл. Това ще улесни другите да възпроизведат вашия проблем и да работят върху него. - person David Grayson   schedule 27.05.2015BaseA
? - person StenSoft   schedule 27.05.2015