gpt4 book ai didi

c++ - 在模板类中设置动态构造函数参数的方法

转载 作者:行者123 更新时间:2023-12-02 10:35:11 25 4
gpt4 key购买 nike

假设我们有一个模板类(我将其称为 TileCreator )基于另一个类 Tile
在某些情况下, 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添加构造函数以正确读取该结构并释放它。

我希望对此有一个更优雅的解决方案!

最佳答案

编辑了我对以下内容的回答:

这样做的缺点是,您需要在Creator中实例化一个模板对象,该模板对象将在通过调用复制构造函数创建其他对象时使用。您当然需要注意管理指针(可能使用智能指针)

template <typename Tile>
class Creator {
private:
Tile *tileTemplate;
public:

template <typename... Args>
Creator(Args&& ... args) {
tile = new Tile(std::forward<Args>(args)...);
}
void createNew() {
Tile tile = *tileTemplate;
}
~Creator() {
delete tileTemplate;
}
};

class A {
public:
A(int a, int b):a(a) {}
};

class B {
public:
B(const std::string& a):a(a) {}
};

int main()
{

Creator<A> ca(1,2);
ca.createNew();

Creator<B> cb("Hello");
cb.createNew();

}

关于c++ - 在模板类中设置动态构造函数参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60669755/

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