我正在尝试实现工厂以根据传递的类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 ...
对于每种派生类型,您需要make_unique
的不同实例化。因此,您最终需要这样的代码: