我有一组包含多个变量的结构:
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 ......我该怎么用?提高::绑定?
答案 0 :(得分:2)
是的,添加boost :: bind就是答案:
std::transform(test_cases,
test_cases + tc_size,
back_inserter(output_vector),
boost::bind(&test_case::output, _1));
这是有效的,因为std::transform
将test_case
参数传递到bind()
生成的仿函数中。仿函数应用member pointer syntax (&T::x)
来提取并返回成员变量。