【发布时间】:2020-06-20 18:04:58
【问题描述】:
我不确定这是否可行,但我希望能够基于元组的元素递归调用函数。例如,一个元组如std::tuple<int,float,double> 应该调用expand_nested 3 次,然后使用int、float 或double 类型的参数调用它的回调函数。
#include <tuple>
#include <vector>
#include <functional>
template <typename T>
struct tree_item
{
T param;
std::function<void(T)> callback;
};
template <typename... Ts>
struct tuple_node
{
std::tuple<Ts...> tupl;
};
// recursion base case
template <typename T>
void expand_nested(tree_item<T> ti)
{
ti.callback(ti.param);
}
// recursive function
template <typename T>
void expand_nested(tree_item<T> ti, tree_item<T> rest...)
{
ti.callback(ti.param);
expand_nested(ti, rest...);
}
template <typename... Ts>
void expand_root(tuple_node<Ts...> nodes)
{
auto current = std::get<1>(nodes.tupl);
auto rest = std::get<...>(nodes.tupl); // Made up syntax that doesn't work
// How can I fill the "rest" variable with the remaining elements of the "nodes.tupl" tuple?
expand_nested(current, rest...);
}
int main()
{
tuple_node<tree_item<int>, tree_item<float>> nodes;
tree_item<int> tree_int;
tree_item<float> tree_float;
tree_item<double> tree_double;
tuple_node<tree_item<int>, tree_item<float>, tree_item<double>> node;
node.tupl = std::make_tuple(tree_int, tree_float, tree_double);
expand_root(nodes);
}
【问题讨论】:
标签: c++ templates tuples variadic-functions