gpt4 book ai didi

依赖于特定类类型的 C++ 模板方法?

转载 作者:搜寻专家 更新时间:2023-10-31 00:52:36 24 4
gpt4 key购买 nike

假设我有一个如下定义的模板化对象池类:

template<class T, size_t pool_size>
class Pool
{
public:
create(int index, *init parameters*)
{
pool_objects_[index].init(*init parameters*);
};

private:
std::array<T, pool_size> pool_objects_;
}

这个对象池类本质上是创建一组对象,然后允许其他人在池中“创建”对象实例。

我遇到的麻烦是创建方法。此方法的参数取决于实际的池对象类型。因此,我无法声明适用于每种 Pool 对象类型的函数。

例如,假设我有两个定义如下的 PoolObject 类型:

class Entity1;
class Entity2;

每个类实例都需要一组不同的参数来初始化对象。因此,对于我的通用 Pool 类,我需要 create 方法来根据 Pool 对象类型接受不同的参数。

实现此目标的好方法是什么?

我想我可以创建另一个模板参数,让用户定义一个“InitObject”。 init 对象本质上是一个包含初始化信息的结构。概述如下:

template<class T, class T_init, size_t pool_size>
class Pool
{
public:
create(int index, T_init init_obj)
{
pool_objects_[index].init(init_obj);
};

private:
std::array<T, pool_size> pool_objects_;
}

这看起来是一种合理的方法吗?或者它看起来像是一个模板黑客?我觉得不必指定 T_init,因为我们已经指定了 T,但是,我不确定是否有其他选择。

最佳答案

您可以create 一个可变参数模板,它需要一个template parameter pack作为模板参数。例如

template <typename... U>
void create(int index, U&&... u)
{
pool_objects_[index].init(std::forward<U>(u)...);
};

然后你可以将所有用于初始化的参数(在 index 之后)传递给 create,它们稍后将被转发给 init

关于依赖于特定类类型的 C++ 模板方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51316551/

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