【发布时间】:2021-09-13 10:34:33
【问题描述】:
对元组进行迭代是 C++ 世界中的一个常见问题,我知道可以完成的各种方法 - 通常使用递归和可变参数模板。
原因是元组通常包含不同的元素类型,正确处理每种类型的唯一方法是拥有与该类型匹配的特定重载。然后我们让编译器使用递归将每个元素分派给正确的函数。
我的情况是这样的:我有一个元素的元组,每个元素都是一个模板类的实例:
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::make_index_sequence 或 stackoverflow.com/a/37227316/14237276 的工作