c++ - 检索不同类型的对象指针

标签 c++ c++14 folly

假设我有一堆指向不同类的不同对象的指针

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/

相关文章:

ios - 找不到“folly/folly-config.h”文件

php - 无法为 OS X 10.9.5 安装 Sphinx : '"/lib/cpp"fails sanity check'

C++:如何在不使用全局变量的情况下通过系统传递用户输入?

c++ - put_time 进入流奇怪的行为

c++ - 我无法理解的简单 lambda 函数

c++ - 如何将 boost::lexical_cast 与 folly::fbstring 一起使用?

c++ - 访问网格的顶点

C++ 从标准输入读取文件名

c++ - 可写的 zip 范围是不可能的?

facebook - 如何使用 Proxygen 和 Folly 发送 HTTP 分块响应来模拟视频流?