gpt4 book ai didi

c++ - 模板可变函数 : arbitrary number of classes with arbitrary number of constructor parameters

转载 作者:行者123 更新时间:2023-11-30 03:38:57 26 4
gpt4 key购买 nike

我不确定正确的名称是什么,到目前为止我理解使用可变模板参数的概念(例如,与 std::initializer_list 相比)。

所以让我们假设有任意数量的类 k 和任意数量的参数 i 这取决于每个类 k 构造函数.

我知道我可以使用可变参数模板构造任何类 k:

template <typename T, typename... Args>
void make_class(Args... args)
{
auto k = T(args...);
}

但是我想允许创建多个类型不同并且很可能具有不同Args 的类。此外,我想迭代正在构造的类 k 。沿线的东西:

template <typename T, typename... Classes, typename Args>
void make_classes(Classes... classes)
{
for (auto type : classes) {
make_class<T>(args...); //???
}
}
  1. 这可能吗?
  2. 如果不可能,是否有任何潜在的解决方法?
  3. 这种模式/方法有名称吗?这是一个parameter_pack吗?

如果这是重复的,我们深表歉意。

最佳答案

您需要通过在元组中传递参数来描述每个类的参数,否则对于具有多个构造函数的类,结果可能会不明确(请注意,大多数类至少具有默认构造函数和复制构造函数).

完成了,这很容易写:

template<class... Classes, class... Args>
void make_classes(Args&&... args) {
auto k = std::tuple<Classes...>{
std::make_from_tuple<Classes>(std::forward<Args>(args))...};
}

用法:

make_classes<std::pair<int, float>, std::string, std::vector<double>>(
std::forward_as_tuple(42, 3.14f),
std::forward_as_tuple("hello"),
std::forward_as_tuple(5, 99.99));

Example .

请注意,make_from_tuple 是一个 C++17 库添加;如果您的图书馆没有,您可以复制 example implementation .

关于c++ - 模板可变函数 : arbitrary number of classes with arbitrary number of constructor parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39168220/

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