【发布时间】:2020-06-25 10:15:58
【问题描述】:
假设我们有一个基于另一个类 Tile 的模板类(我称之为 TileCreator )。 在某些情况下,Tile 类的构造函数需要参数进行初始化。 现在 TileCreator 类将构造许多 Tile 对象,所以我想将必要的参数作为成员变量存储在 TileCreator 中。
有什么好的方法吗?如何让我的模板代码知道这些参数的类型和数量?
我唯一的方法是使用指向它的 void* 指针,但是,我每次都需要手动分配和释放内存吗?
理想情况下它应该像这样工作:
template<class Tile> class TileCreator {
public:
void CreateNew() {
Tile tile(par);
}
void setPar(void* par) {
this->par = par;
}
private:
void* par;
};
class Cake {
public:
Cake(int sugar, bool chocolate) {
// ...
}
};
int main() {
TileCreator<Cake> baker;
// baker.setPar(over 9000, true); obviously doesnt work like this
return 0;
}
我必须分配一个包含所有参数的结构并给出它的指针,然后还为每个可能的 Tile 添加构造函数以正确读取该结构并释放它。
我希望有一个更优雅的解决方案!
【问题讨论】:
-
如果 tile creator 支持的类型集已知,那么您可以使用 std::variant
标签: c++ class oop templates initialization