gpt4 book ai didi

c++ - 如何使用笛卡尔积将 vector 元组转换为元组 vector ?

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:51 26 4
gpt4 key购买 nike

<分区>

为了单元测试类的目的 std::tuple构造函数,我想生成一个特殊情况的样本加上构造函数参数的随机值。假设我有一个 std::tuplestd::vector<T1>通过std::vector<Tn> ,(其中每个 Ti 都不同)我如何将其转换为 std::vector所有的笛卡尔积 std::tuple<T1, ..., Tn>组合?

具体来说,我想要一个看起来像这样的可变函数模板:

template<typename... Args>
std::vector<std::tuple<Args...> cartesian_product(std::vector<Args>...)
{
// template magic or fat mulitple loops?
}

可以这样使用:

// some type to be tested
class MyType
{
MyType(std::tuple<int, bool, std::string>);
// bla
};

// test values for each constructor argument
std::tuple< std::vector<int>, std::vector<bool>, std::vector<std::string> > input {
{ 1, 2, 3}, { false, true}, { "Hello", "World"}
};

// should become 3 x 2 x 2 = 12 cases { {1, false, "Hello"}, ... , {3, true, "World"} }
std::vector< std::tuple<int, bool, std::string> > test_cases = cartesian_product( input );

// can write flat single loop over all cases
for (auto t: test_cases) {
BOOST_CHECK(MyType(t).my_test());
}

是否有任何 (Boost) 库可以开箱即用?为此编写可变参数模板有多复杂?

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