/ / tipo de função sobrecarregada não resolvida para “fs :: path :: string” - c ++, boost

tipo de função sobrecarregada não resolvida para “fs :: path :: string” - c ++, boost

impulso 1,49 gcc versão 4.6.3

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

Como editar este código?

[65%] Criando objeto CXXc ++ / lib / demultiplex / CMakeFiles / casava_demultiplex.dir / BclDemultiplexer.cpp.o /bak/software/Linux/CASAVA_v1.8.2/src/c++/lib/demultiplex/BclDemultiplexer.cpp: Na função de membro 'const casava :: demultiplex :: BclDemultiplexer :: ClusterCorrectedBarcodeIndex casava :: demultiplex :: BclDemultiplexer :: unsCluster int) const ': /bak/software/Linux/CASAVA_v1.8.2/src/c++/lib/demultiplex/BclDemultiplexer.cpp:65:50: error: nenhuma função correspondente para chamada para 'bind (, boost :: arg &)' /bak/software/Linux/CASAVA_v1.8.2/src/c++/lib/demultiplex/BclDemultiplexer.cpp:65:50

Respostas:

3 para resposta № 1

Se você pode usar C ++ 11 (o GCC 4.6 suporta isso usando o sinalizador -std = c ++ 0x), você pode usar uma função lambda e ela se tornará mais legível:

std::transform(barcodeFiles.begin(), barcodeFiles.end(),
std::ostream_iterator<std::string>(std::cerr, "n"),
[](const fs::path& p) {
return p.string();
}
);

6 para resposta № 2

A resposta pode ser encontrada no Perguntas frequentes sobre 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
)
);