gpt4 book ai didi

c++ - 元组的可变生成

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

我想编写一个基于整数值和坐标的 C++ 代码,生成一组元组和函数调用,如下所示:

// dimension = 1, input = (i) generated tuples: (i-1) (i), (i+1)
// dimension = 2, input = (i,j) generated tuples: (i-1, j), (i, j-1), (i, j),(i+1, j), (i, j+1)
<typename Index, int dimension>
void my_function(Index input)
{
// some magic here that generates the following code or sth like this
get_value(generated_tuple0);
get_value(generated_tuple1);
....
....
get_value(generated_tupleN);

}

我不擅长模板编程,也许在 C++11 中使用可变参数是可能的。

最佳答案

假设 Index 是一个元组,这是一个可能的解决方案:

template <class Index, int I, int dimension>
struct tuple_builder_t
{
static void build(std::vector<Index> &result, Index center)
{
Index iter = center;
for (int i = -1; i < 2; i++)
{
std::get<I - 1>(iter) = std::get<I - 1>(center) +i;
tuple_builder_t<Index, I, dimension>::build(result, iter);
}
}
};

template <class Index, int dimension>
struct tuple_builder_t<Index, dimension, dimension>
{
static std::vector<Index> build(std::vector<Index> &result, Index center)
{
Index iter = center;
for (int i = -1; i < 2; i++)
{
std::get<dimension - 1>(iter) = std::get<dimension - 1>(center) +i;
result.push_back(iter);
}
}
};

template <class Index, int dimension>
void my_function(Index index)
{
std::vector<Index> result;
tuple_builder_t<Index, 1, dimension>::build(result, index);
}

这是一个很好的问题,我已经发现自己遇到了类似的问题(遍历超立方体的维度)

关于c++ - 元组的可变生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30771398/

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