0

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

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

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

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

我想提取outputs 的向量,以便可以通过 将它们与另一个数组进行比较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());

但似乎我应该能够在没有每种类型的仿函数/结构的情况下做到这一点。

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

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

显然operator.()不能用于 lambda 变量......我应该使用什么?提升::绑定?

4

1 回答 1

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(). 函子应用成员指针语法(&T::x)来提取和返回成员变量。

于 2010-10-28T14:54:52.373 回答