gpt4 book ai didi

c++ - 将可变参数包缩短为 N 种

转载 作者:行者123 更新时间:2023-12-02 18:17:55 25 4
gpt4 key购买 nike

我想编写一个大小为 N (> 0) 和可变数量参数 (>= N) 的类。它应该有一个带有 N 个参数的构造函数和一个具有相同类型的成员 std::tuple:

template <size_t N, typename... Args>
struct Example {
// A constructor taking N parameters of type Args[N], initializing the member tuple
// (e.g. param 1 has type Args[0], param 2 has type Args[1], ...,
// param N has type Args[N-1])
// A tuple with N elements, each corresponding to Args[N]
// (e.g. std::tuple<Args[0], ..., Args[N-1]>)

//For instance Example<3, int, float, int, bool> should result in
constexpr Example(int a, float b, int c): t(a, b, c) {}
std::tuple<int, float, int> t;
}

一般来说:这可能吗?如果没有,是否有可行的替代方案?为什么这有效/无效?我正在使用 C++20。

最佳答案

就我理解这个问题而言,它似乎只是在问如何生成 tuple来自争论。其中,使用 Boost.Mp11 ,是一句简短的话(一如既往):

template <size_t N, typename... Args>
using Example = mp_take_c<N, std::tuple<Args...>>;

而不是 Example<3, int, float, int, bool>是具有成员 tuple<int, float, int> 的某种类型使用一个构造函数,它实际上是 tuple<int, float int> .

如果您出于某种原因,特别需要一个成员元组和指定的构造函数,我们可以很容易地做到:

template <typename... Ts>
struct ExampleImpl {
std::tuple<Ts...> t;
constexpr ExampleImpl(Ts... ts) : t(ts...) { }
};

template <size_t N, typename... Args>
using Example = mp_take_c<N, ExampleImpl<Args...>>;

关于c++ - 将可变参数包缩短为 N 种,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71301988/

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