c++ - 如何遍历 TR1 元组

标签 c++ tuples c++03 stdtuple

由于卡在 TR1 土地,对于测试程序,我需要对一些特定类型的对象执行某些操作。我有几个元组类型定义,如下所示:

typedef std::tr1::tuple< bool
                       , signed char
                       , signed short
                       , signed int
                       , signed long long
                       , unsigned char
                       , unsigned short
                       , unsigned int
                       , unsigned long long >  integral_types;

从每个元组类型中创建一个对象。然后我有类似于这样的功能模板:

template<typename T>
void invoke_operation_1(T& obj);

需要为元组对象中的所有对象调用这些。

我如何在 C++03 中做到这一点?

最佳答案

Bristol 刚刚为 C++14 确定了一项功能来解决这个问题。处理起来并不难。

对于更简单的情况,您可以使用递归模板。虽然没有部分功能特化等,但它有点乱。

template<typename Tup, std::size_t N> struct visit_detail {
     template<typename F> static void call(Tup& t, F f) {
         f(std::tr1::get<N>(t));
         return visit_detail<Tup, N+1>::call(t, f);
     }
};
template<typename Tup> struct visit_detail<Tup, std::tr1::tuple_size<Tup>::value> {
    template<typename F> static void call(Tup& t, F f) {}
}

template<typename Tup, typename F> void visit(Tup& t, F f) {
    return visit_detail<Tup, 0>::call(t, f);
}

这里的 f 可以是硬编码的,也可以是参数函数对象或任何你想要的。

关于c++ - 如何遍历 TR1 元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16360683/

相关文章:

Python自定义排序,通过元组中两个元素的差异

Python:生成元组的语句的执行顺序是否有保证?多语句 lambda

c++ - 对整个 vector 应用条件

c++ - 如何静态断言模板枚举类型? (C++11)

c++ - 如何强制 std::sort 使用 move 构造函数和 move 赋值?

c++ - Qt Creator, ptrace : Operation not permitted. 永久解决方案是什么?

swift - 单元素括号表达式/元组与括号的常用用法

c++ - 如何使用 C++ 中的通用 vector 对动态内存中的对象列表进行排序?

c++ - 测试成员函数模板

c++ - 具有 const 成员的结构 vector ?