Ich habe einen Unit-Test mit Boost-Bibliothek-Test-Framework erstellt und ein Problem mit der Verwendung von Std :: Bind Platzhalter zusammen mit der genannten Bibliothek.Problem mit der Verwendung von Std :: Bind Platzhalter zusammen mit Boost-Bibliothek
Wenn ich ausdrücklich std::placeholders::
+ _1 verwenden, es funktioniert gut:
std::bind(&TestFixture::concatStrings, this, std::placeholders::_1, std::placeholders::_2)
Aber wenn ich die std::placeholders::
und direkt _1
verwenden weglassen, so führt dies zu einem Übersetzungsfehler:
Error 1 error C2664: 'std::string std::_Pmf_wrap<std::string (__thiscall TestFixture::*)(const std::string &,const std::string &),std::string,TestFixture,const std::string &,const std::string &>::operator()(_Farg0 &,const std::string &,const std::string &) const' : cannot convert argument 2 from 'boost::arg<1>' to 'const std::string &' C:\APPS\msvs2013\VC\include\functional 1149 1 test
Lambda-Verwendung , ist die beste Lösung, die ich mir vorstellen kann:
[&](const std::string& x, const std::string& y){ return concatStrings(x, y); }
Ich möchte nur verstehen, wenn Methoden verwendet, die in std Konflikte mit Boost-Bibliothek, wie die std :: bind definiert. Danke im Voraus.
Hallo! Danke für deine Antwort. Die Verwendung von '_1' funktioniert gut mit boost :: bind. Wenn ich jedoch explizit std :: bind verwende, sollte ich 'std :: placeholders :: _ 1' verwenden. Danke, dass Sie auf die Aufnahme im Lambda hingewiesen haben, ich werde es mir zur Gewohnheit machen, meine Aufnahme sicher zu wählen. :) – cawols