0

複数の変数を含む構造体の配列があります。

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

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

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

sのベクトルを抽出して、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());

しかし、タイプごとにファンクター/構造体がなくてもこれを実行できるはずです。

構造体から1つの変数のベクトル/配列を抽出するより速い方法はありますか?boost :: lambdaを使用してみましたが、機能しませんでした:

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

どうやらoperator.()ラムダ変数では使用できません...何を使用すればよいですか?boost :: bind?

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::transformにパラメーターを渡すために機能します。ファンクターは、メンバーポインター構文を適用して、メンバー変数を抽出して返します。test_casebind()(&T::x)

于 2010-10-28T14:54:52.373 に答える