Mit boost::bind mit einem Konstruktor
Ich versuche, neue Objekte zu erstellen, und fügen Sie zu einer Liste von Objekten mit boost::bind. Zum Beispiel.
struct Stuff {int some_member;};
struct Object{
Object(int n);
};
....
list<Stuff> a;
list<Object> objs;
....
transform(a.begin(),a.end(),back_inserter(objs),
boost::bind(Object,
boost::bind(&Stuff::some_member,_1)
)
);
Diese scheint nicht zu funktionieren. Gibt es eine Möglichkeit zu nutzen, einen Konstruktor mit boost::bind, oder sollte ich versuchen eine andere Methode?
- Was macht du damit "arbeiten"? es ist nicht kompiliert oder die Liste ist nicht besiedelt?
- Som-code, der wirklich kompiliert helfen würde. Was ist "a" - es scheint, haben Sammlung beginnen & end-Methoden, aber auch some_member?
- jon, das war ein Fehler meinerseits. Es ist jetzt behoben. Dewfy, der code nicht kompilieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn
Stuff::some_member
istint
undObject
einen non-explicit ctor unter einerint
sollte diese Arbeit:Sonst könnten Sie boost::lambda::Konstruktor
Wenn Sie mit boost 1.43, können Sie mit boost::Fabrik-und boost::value_factory, mit denen Sie Kapseln ein Konstruktor Aufruf.
Wie diese:
Éric link sagt, in Teil, "Es ist nicht möglich, die Adresse eines Konstruktors, daher Konstruktoren können nicht verwendet werden, die als Ziel-Funktionen in bind-Ausdrücke." Also, was ich versuche zu tun, war unmöglich.
Bekam ich um ihn herum, indem Sie eine Funktion erstellen:
und mit Object_factory, wo ich versuchte, verwenden Sie den Objekt-Konstruktor.
Es hängt davon ab, was
a::some_member
wird zurückkehren-wenn es sich um eineObject
dann sollten Sie nicht brauchen, wickeln Sie das Ergebnis in einerObject
ctor-es wird bereits gebaut worden. Wenn die routine nicht wieder einObject
dann sind Sie wahrscheinlich gehen zu müssen, zu massage das Ergebnis etwas, das Sie ziehen konnte, der mitboost::bind
aber eine utility-Funktion halten Sie den code besser lesbar.In jedem Fall mehr code würde helfen, speziell die Typ-Instanz
a
undObject
.