假设我有一堆指向不同类的不同对象的指针
class1* obj1;
class2* obj2;
class3* obj3;
并且它们都有一个方法 getArray()
,该方法返回一个用于后处理的 vector 。
如果所有这些指针都存储在某种列表中(比如空指针列表)
当我迭代列表时,有没有办法确定可以使用哪种类型的指针转换?
我知道这可以通过类层次结构和从单个类派生上述类来解决。由于其中很多是遗留代码,是否可以完成提到的内容?
Folly dynamic 不允许我存储指针,这是我尝试过的一件事
最佳答案
如果 getArray() 始终具有相同的签名(或足够相似以转换为相同的类型)——您可以做的是为 decorator 创建一个类层次结构的 duck-typed遗留对象/类。您可以使用非模板接口(interface)的模板派生类进行包装,而无需过多的键入工作。
沿着这些路线的东西(更多的防御性编码,可能是遗留对象的智能指针等):
class IDecorator {
public:
virtual std::vector<ubyte> GetArray() = 0;
};
template<typename TLegacyType>
class TDecorator : public IDecorator {
public:
TDecorator(const TLegacyType *ip_legacy_object)
: mp_legacy_object(ip_legacy_object) {}
std::vector<ubyte> GetArray() override {
return mp_legacy_object->GetArray();
}
private:
const TLegacyType *mp_legacy_object;
};
关于c++ - 检索不同类型的对象指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49064921/