3

ブースト 1.49 gcc バージョン 4.6.3

        std::transform(barcodeFiles.begin(), barcodeFiles.end(), std::ostream_iterator<std::string>(std::cerr, "\n"),
            boost::bind(&fs::path::string, _1));

このコードを編集するには?

[ 65%] CXX オブジェクトの構築 c++/lib/demultiplex/CMakeFiles/casava_demultiplex.dir/BclDemultiplexer.cpp.o
/bak/software/Linux/CASAVA_v1.8.2/src/c++/lib/demultiplex/BclDemultiplexer.cpp: メンバー関数内 'const casava::demultiplex::BclDemultiplexer::ClusterCorrectedBarcodeIndex casava::demultiplex::BclDemultiplexer::mapClusterBarcodes(unsigned int) const':
/bak/software/Linux/CASAVA_v1.8.2/src/c++/lib/demultiplex/BclDemultiplexer.cpp:65:50: エラー: 'bind(, boost::arg&)' の呼び出しに一致する関数がありません
/bak/software/Linux/CASAVA_v1.8.2/src/c++/lib/demultiplex/BclDemultiplexer.cpp:65:50
4

2 に答える 2

6

答えは、ブースト バインドの FAQ にあります。

std::transform(
    paths.begin(), paths.end(),
    std::ostream_iterator<std::string>(
        std::cerr, "\n"
    ),
    boost::bind(
        static_cast<
            std::string const & (boost::filesystem::path::*)() const
        >(&boost::filesystem::path::string), 
        _1
    )
);
于 2012-05-31T05:45:38.663 に答える
3

C++11 を使用できる場合 (GCC 4.6 ではフラグ -std=c++0x を使用してサポートされています)、ラムダ関数を使用すると読みやすくなります。

std::transform(barcodeFiles.begin(), barcodeFiles.end(),
               std::ostream_iterator<std::string>(std::cerr, "\n"),
               [](const fs::path& p) {
                   return p.string();
               }
);
于 2012-05-31T09:39:59.327 に答える