gpt4 book ai didi

c++ - 如何迭代具有相同基类的元素元组

转载 作者:行者123 更新时间:2023-12-04 11:39:15 26 4
gpt4 key购买 nike

迭代元组是 C++ 世界中的一个常见问题,我知道可以完成的各种方法 - 通常使用递归和可变参数模板。
原因是元组通常包含不同的元素类型,正确处理每种类型的唯一方法是拥有与此类型匹配的特定重载。然后我们让编译器使用递归将每个元素分派(dispatch)给正确的函数。
我的情况是这样的:我有一个元素元组,每个元素都是模板类的实例:

std::tuple<my_class<int>, my_class<string>, my_class<float>>
另外, my_class<T>my_class_base 的派生类,这不是模板。
考虑到这个限制,是否可以写一个 at(tuple_type& tuple, size_t n)在 O(1) 步中返回元组的第 n 个元素作为对基类的引用的函数?
然后我可以写
for (size_t i = 0; i < N; i++){
auto& o = at<my_base_class>(tuple, i);
o.call_base_method(...);
}
谢谢。

最佳答案

您可能只是使用 std::apply :

std::apply([](auto&...args){ (args.call_base_method(), ...); }, tuple);
要回答您的问题,您可能会执行以下操作:
template <std::size_t... Is, typename tuple_type>
my_class_base& at_impl(std::index_sequence<Is...>, tuple_type& tuple, size_t n)
{
my_class_base* bases[] = {&std::get<Is>(tuple)...};
*return bases[n];
}

template <typename tuple_type>
my_class_base& at(tuple_type& tuple, size_t n)
{
auto seq = std::make_index_sequence<std::tuple_size<tuple_type>::value>();
return at_impl(seq, tuple, n);
}
Demo

关于c++ - 如何迭代具有相同基类的元素元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68208797/

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