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

问题描述 投票:0回答:1

我正在尝试实现工厂以根据传递的类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。在那种情况下,我在派生类中丢失了唯一的计算函数。我可能可以借助模板来实现这一目标,但是如果没有模板,我将不胜感激。

我正在尝试实现工厂以根据传递的类ID返回派生类的实例。上课日期:公共IDay {/ * ... * /};类别Day01:公众日{void ...

c++ inheritance casting scope switch-statement
1个回答
0
投票

对于每种派生类型,您需要make_unique的不同实例化。因此,您最终需要这样的代码:

© www.soinside.com 2019 - 2024. All rights reserved.