boost::polymorphic_get相关测试程序及实现
在C++中,我们常常使用继承来提供多种行为。当我们基于父类指针或引用操作一个子类对象时,可能会遇到需要知道这个指针或引用所指向的对象的实际类型的情况。常见的实现方式是使用RTTI(Run-time Type Information),但这种方式通常会带来性能损失。
Boost库中提供了一个更加高效的解决方案——polymorphic_get。他可以在不需要RTTI的情况下,获取一个多态基类指针或引用的实际类型。下面我们通过一个简单的例子来了解它的使用方法。
假设我们有一个基类Animal和两个继承自它的子类Dog和Cat:
class Animal {
public:
virtual ~Animal() {};
};
class Dog : public Animal {
public:
void bark() {
std::cout << "Woof!" << std::endl;
}
};
class Cat : public Animal {
public:
void meow() {
std::cout << "Meow!" << std::endl;
}
};
我们可以定义一个指向Animal的vector,并把一些Dog和Cat对象装入其中:
std::vector<std::unique_ptr<Animal>> animals;
animals.emplace_back(std::make_uniq