T
muß den alten Thread nochmal rauskramen:
nachdem ich in letzter Zeit ziemlich häufig dem functor-Wahn verfallen bin, habe ich mich etwas diszipliniert und nun doch ein bisschen häufiger mit den adaptern herumprobiert. Dabei bin ich auf folgendes Problem gestoßen:
int DbWriteContainer::SynchronizeDiagnosticTranslation( DiagnosticReader& theReader )
{
for_each( begin(), end(), bind2nd( mem_fun( &DiagnosticWriter::SynchronizeDiagnosticTranslationPtr ), &theReader ) );//funktioniert
for_each( begin(), end(), bind2nd( mem_fun( &DiagnosticWriter::SynchronizeDiagnosticTranslation ), &theReader ) );//funktioniert nicht -> kann Referenz nicht binden
return true;
}
//Auszug aus dem DiagnosticWriter
class DiagnosticWriter : public DbWriteWrapper
{
public:
virtual void SynchronizeDiagnosticTranslation( DiagnosticReader& theWrapper ) = 0;//Synchronizes the translation rules of the DiagnosticReader with the own Diagnostic representation
virtual void SynchronizeDiagnosticTranslationPtr( DiagnosticReader* pWrapper ){ SynchronizeDiagnosticTranslation( *pWrapper ); }//yust a adapter to be usable with for_each
};
nach längerem Rumprobieren hab ich dann die SynchronizeDiagnosticTranslationPtr eingefügt, da mir bind2nd partout die Referenz-Version nicht binden wollte.
Glaube ich diesem Artikel: http://dbforums.com/t523901.html :
It's funny how folks here tell newbies to use t& instead of *t, but when
you really use the language, you almost have to use pointers.
wäre das ein Pluspunkt für Pointer (zumindest, wenn man die Funktion mit den bindern benutzen will). Mir ist nur nicht klar, warum man eine Referenz nicht auch binden können soll.