gpt4 book ai didi

c++ - 枚举值 (int) 到类型的动态映射

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:50 29 4
gpt4 key购买 nike

看来这个问题在我们的工作中很常见。

我们通过网络发送一个 int 或 enum 值,然后我们收到它,我们想创建/调用一个特定的对象/函数。

最简单的解决方案是使用 switch 语句,如下所示:

switch (value) {
case FANCY_TYPE_VALUE: return new FancyType();
}

它工作正常,但我们会有很多这样的开关 block ,当我们创建新的值和类型时,我们需要更改所有这些。这似乎是对的。

其他可能性是使用模板。但我们不能,因为枚举的值是在运行时定义的。

是否有任何正确的设计模式或任何正确的方法?

这似乎是每天编码中一个非常普遍和普遍的问题......

最佳答案

尝试一张 map :

struct Base { };
struct Der1 : Base { static Base * create() { return new Der1; } };
struct Der2 : Base { static Base * create() { return new Der2; } };
struct Der3 : Base { static Base * create() { return new Der3; } };

std::map<int, Base * (*)()> creators;

creators[12] = &Der1::create;
creators[29] = &Der2::create;
creators[85] = &Der3::create;

Base * p = creators[get_id_from_network()]();

(这当然是很粗糙的;至少你会有错误检查和每类自注册方案,这样你就不会忘记注册一个类。)

关于c++ - 枚举值 (int) 到类型的动态映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11831284/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com