如何从C ++中的switch语句返回不同类型的变量

看到

我正在尝试实现工厂以基于传递的类ID返回派生类的实例。

    class Day : public IDay {
        /* ... */
    };

    class Day01 : public Day {
        void calculate_part1() override;
        /* ... */
    };
    .
    .
    .
    class Day25 : public Day {
        void calculate_part1() override;
        /* ... */
    };



    std::unique_ptr<Day> Factory::createDay(uint8_t id) {

        //how to extract "day" variable from switch and pass it to return statement?

        switch (id) {
            case 1: { Day01 day{}; break; } 
            case 2: { Day02 day{}; break; }
            ....
            case 25:{ Day25 day{}; break; }
            default:{ Day day{}; }
        }

        return std::make_unique<decltype(day)>(id, info[id].name, info[id].url,
                                     info[id].input_data_file);
    }

Day01 ... Day25是具有唯一计算功能的类。

我曾尝试创建Day day{}之前类范围的变量switch,然后垂头丧气它Day01...dynamic_cast里面switch在那种情况下,我在派生类中丢失了唯一的计算函数。我可能可以借助模板来实现这一点,但是如果没有模板,将不胜感激。

克里斯·多德

make_unique每个派生类型都需要一个不同的实例化因此,您最终需要如下代码:

std::unique_ptr<Day> Factory::createDay(uint8_t id) {
    switch (id) {
        case 1: return std::make_unique<Day01>(id, info[id].name, info[id].url,
                                 info[id].input_data_file);
        case 2: return std::make_unique<Day02>(id, info[id].name, info[id].url,
                                 info[id].input_data_file);
        case 3: return std::make_unique<Day03>(id, info[id].name, info[id].url,
                                 info[id].input_data_file);
            :

如果您要减少重复输入,可以将make_unique调用包装在另一个模板中:

template<class DAY, uint8_t ID> std::unique_ptr<Day> Factory::createDay() {
    return std::make_unique<DAY>(ID, info[ID].name, info[ID].url,
                                   info[ID].input_data_file); }

std::unique_ptr<Day> Factory::createDay(uint8_t id) {
    switch (id) {
        case 1: return createDay<Day01, 1>();
        case 2: return createDay<Day02, 2>();
              :
        case 25: return createDay<Day25, 25>();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C中添加不同类型的变量

在C中声明外部变量的不同类型

C中具有不同类型的外部变量

如何将不同类型的值分配给if语句中的变量,然后在if语句后使用此变量?

如何返回不同类型的数组?

如何创建不同类型的变量堆栈?

java中的泛型类型:如何定义一个返回多个不同类型的函数

C++中根据模板类型返回不同类型的对象

是否有可能基于C ++中的输入变量来定义不同类型的变量?

如何在C中存储不同类型的数据?

如何在字典中存储来自 C# 中不同类的不同类型的方法

如何在基于Java中字符串值的方法中返回不同类型?

在C ++中读取不同类型的数据

C ++中不同类型的数组

如何在Haskell的同一函数中返回不同类型?

如何从DAML中的if和其对应的else返回不同类型?

R如何将不同类型的变量打印到一个txt文件中

[Java]如何将对象的ArrayList中的内容设置为不同类型的变量?

在C ++函数中返回两种不同类型的两个值

Python C++ api - 在函数重载中返回不同类型

Delphi-如何从函数返回不同类型

如何返回不同类型的可观察对象

如何专门设计用于返回不同类型的模板函数?

如何使函数返回不同类型的两列(R)?

如何在循环中创建不同类型的变量?

如何在报告(.rdlc)中有不同类型的变量

C ++索引访问不同类型的结构变量

如何将两个不同类型的变量打包到一个对象变量中?

如何让函数返回几个不同类型的特征矩阵(C++)