2016-04-15 18 views
0

Ich versuche, eine Boost :: -Funktion zu einem new_ptr (mit Parametern) zu erhalten, die in einer Hash-Tabelle für die spätere Verwendung gespeichert werden kann. Eine Art Registrierer von IDs für Konstruktoren, die Module verwenden können. Unterhalb der vereinfachte Problem ist:Boost :: Funktion von boost :: lambda :: bind von new_ptr mit Parametern

#include <boost/lambda/bind.hpp> 
#include <boost/lambda/construct.hpp> 
#include <boost/function.hpp> 

using namespace boost::lambda; 

struct TestObject 
{ 
    TestObject(int p){} 
}; 

void doStuff() 
{ 
    boost::function<TestObject*(int)> tf1 = bind(new_ptr<TestObject>(), _1); 
} 

Die Bindungs ​​Werke von selbst, aber die Syntax für boost :: Funktion muss ausgeschaltet sein, denn es gibt mir:

error C2664: 'TestObject::TestObject(int)' : cannot convert parameter 1 from 'boost::lambda::lambda_functor<T>' to 'int' BOOST\1.57.0\boost\lambda\construct.hpp 146 1 

Ich habe dies getan, bevor mit Konstruktoren, die keine Parameter haben (funktioniert super). Ich kann nicht genau herausfinden, was fehlt, oder ob ich versuche, etwas Unmögliches zu tun.

Kompilieren mit Boost v1.57.0 und msvc 2012 (v110).

+1

Kann nicht repro, welche Dateien schließen Sie ein? Bitte geben Sie eine [MCVE] an. – Barry

+0

Bearbeitet, mein Schlechter. – jinc

+0

Kompiliert immer noch gut für mich wie es ist. – Barry

Antwort

0

-Code kompiliert auf standalone MSVC 2015

Sie können Ihre VS-Upgrade, Visual Studio 2012 bis MSVC 2015 neu konfigurieren oder Ihre Funktionen auf einem lib/DLL von der Kommandozeile kompiliert einzukapseln.

+0

Gut zu wissen, ich werde es im Hinterkopf behalten. Keine unmittelbare Möglichkeit für mich, leider. – jinc

Verwandte Themen