C++中的类查找

Mar*_*ham 1 c++ class

问题:

我有一组像Database.I类的需要解压根据自己的操作码一定的反应.

eq:操作码:01请求:A

从请求A解压缩响应,我创建了一个类A.同样,我没有类.

我需要根据操作码将byteArray解压缩到其中一个类中.

在C++中是否有任何机制来实现某种类型的映射,我可以在其中查找操作码并选择要解压缩的类/响应

PS:非常喜欢可读的解决方案和一些解释.

我对JAVA知之甚少,但在JAVA中我猜我们有使用Object类型,Class类型等的机制.

谢谢

The*_*ant 5

您可以实现工厂:从操作码(作为整数/枚举),类名(作为字符串)等映射到动态实例化类的函数:

enum Opcode {
    OpFoo,
    OpBar,
    OpQux,
};

// this should be a pure virtual ("abstract") base class
class Operation {
    // ...
};

class OperationFoo: public Operation {
    // this should be a non-abstract derived class
};

class OperationBar: public Operation {
    // this should be a non-abstract derived class too
};

std::unordered_map<Opcode, std::function<Operation *()>> factory {
    { OpFoo, []() { return new OperationFoo; } }
    { OpBar, []() { return new OperationBar; } }
    { OpQux, []() { return new OperationQux; } }
};

Opcode opc = ... // whatever
Operation *objectOfDynamicClass = factory[opc]();
Run Code Online (Sandbox Code Playgroud)

作为奖励,您可以(并且可能应该)在工厂lambda函数的返回类型和使用抽象类操作的其他位置使用智能指针(std::unique_ptrstd::shared_ptr)而不是原始指针.