【问题标题】:Extract a struct member from an array of structs从结构数组中提取结构成员
【发布时间】:2010-10-28 14:54:30
【问题描述】:

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

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.() cannot be used on lambda variables...我应该使用什么? boost::bind?

【问题讨论】:

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


    【解决方案1】:

    是的,添加 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 (&amp;T::x) 提取并返回成员变量。

    【讨论】:

      猜你喜欢
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多