提升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%] Building CXX object c++/lib/demultiplex/CMakeFiles/casava_demultiplex.dir/BclDemultiplexer.cpp.o /bak/software/Linux/CASAVA_v1.8.2/src/c++/lib/demultiplex/BclDemultiplexer.cpp: In member function ‘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: error: no matching function for call to ‘bind(, boost::arg&)’ /bak/software/Linux/CASAVA_v1.8.2/src/c++/lib/demultiplex/BclDemultiplexer.cpp:65:50
答案 0 :(得分:6)
答案可以在FAQ of boost bind
中找到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
)
);
答案 1 :(得分:3)
如果你可以使用C ++ 11(GCC 4.6使用标志-std = c ++ 0x支持它),那么你可以使用lambda函数,它将变得更具可读性:
std::transform(barcodeFiles.begin(), barcodeFiles.end(),
std::ostream_iterator<std::string>(std::cerr, "\n"),
[](const fs::path& p) {
return p.string();
}
);