从结构数组中提取结构成员

时间:2010-10-28 14:54:30

标签: c++ arrays stl struct boost-bind

我有一组包含多个变量的结构:

struct test_case {
    const int input1;
    //...
    const int output;
};

test_case tc[] = {
    {0,  /**/  1},
    //  ...
    {99, /**/ 17}
};

int tc_size = sizeof(tc) / sizeof(*tc);

我想提取output的向量,以便我可以通过BOOST_CHECK_EQUAL_COLLECTIONS将它们与另一个数组进行比较。

我想出了这个:

struct extract_output {
    int operator()(test_t &t) {  
        return t.output;  
    }
}

std::vector<int> output_vector;

std::transform(test_cases, 
               test_cases + tc_size, 
               back_inserter(output_vector), 
               extract_output());

但似乎我应该能够在没有每种类型的functor / struct的情况下做到这一点。

有没有更快的方法从结构中提取一个变量的向量/数组?我尝试使用boost :: lambda,但这不起作用:

std::transform(test_cases, 
               test_cases + tc_size, 
               back_inserter(output_vector), 
               _1.output);

显然operator.() cannot be used on lambda variables ......我该怎么用?提高::绑定?

1 个答案:

答案 0 :(得分:2)

是的,添加boost :: bind就是答案:

std::transform(test_cases, 
               test_cases + tc_size, 
               back_inserter(output_vector), 
               boost::bind(&test_case::output, _1));

这是有效的,因为std::transformtest_case参数传递到bind()生成的仿函数中。仿函数应用member pointer syntax (&T::x)来提取并返回成员变量。