Verwendung von boost :: bind mit einem Konstruktor

7

Ich versuche, neue Objekte zu erstellen und sie mit boost :: bind zu einer Liste von Objekten hinzuzufügen. Zum Beispiel.

%Vor%

Dies scheint nicht zu funktionieren. Gibt es eine Möglichkeit, einen Konstruktor mit boost :: bind zu verwenden, oder sollte ich eine andere Methode ausprobieren?

    
Dan Hook 26.08.2009, 14:52
quelle

4 Antworten

5

Wenn Stuff::some_member ist int und Object hat eine nicht-explizite ctor nimmt eine int , sollte dies funktionieren:

%Vor%

Andernfalls könnten Sie boost :: lambda :: verwenden. Konstruktor

    
Éric Malenfant 26.08.2009, 18:10
quelle
11

Wenn Sie Boost 1.43 verwenden, können Sie boost :: factory und boost :: value_factory verwenden, wodurch Sie einen Konstruktoraufruf kapseln können. So:

%Vor%     
syffinx 05.11.2010 02:29
quelle
3

Éric's Link sagt zum Teil "Es ist nicht möglich, die Adresse eines Konstruktors zu verwenden, daher können Konstruktoren nicht als Zielfunktionen in Bind-Ausdrücken verwendet werden." Was ich also versuchte, war unmöglich.

Ich habe es geschafft, indem ich eine Funktion erstellt habe:

%Vor%

und mit Object_factory, wo ich versuchte, den Object-Konstruktor zu verwenden.

    
Dan Hook 26.08.2009 19:13
quelle
0

Es hängt davon ab, was a::some_member zurückgibt - wenn es ein Object ist, dann sollten Sie das Ergebnis nicht in ein Object ctor umbrechen müssen - es wurde bereits erstellt. Wenn die Routine kein Object zurückgibt, müssen Sie wahrscheinlich das Ergebnis etwas massieren, was Sie mit boost::bind herausfinden könnten, aber eine Dienstprogrammfunktion kann den Code lesbarer halten.

In jedem Fall würde mehr Code helfen, insbesondere die Typinstanz von a und Object .

    
fbrereto 26.08.2009 16:27
quelle

Tags und Links