2016-08-03 52 views
1

Ich verwende ein generisches EventEmitter Beispiel:Wie wird nur das zweite Argument einer Bindefunktion übergeben?

EventEmitter mEventHandler; 

Also habe ich diese binden definiert:

function<void(int, double)> onSetMin = bind(&ILFO::SetMin, this, placeholders::_2); 
mEventHandler.on(kParamID, onSetMin); 

und die on wie:

mEventHandler.emit(paramID, someInt, someDouble); 

die „generic ist "Wie gesagt, und setze 2 Params. Aber meine spezifische Funktion SetMin braucht nur einen param (die someDouble in diesem Fall wäre):

void ILFO::SetMin(double min); 

Wie würden Sie gerade passieren zweiten Paramter von binden?

+0

Sie können zusätzliche Parameter an das von bind zurückgegebene Funktionsobjekt übergeben. Sie werden still ignoriert. –

Antwort

2

einfacher, ein Lambda für Ihr Problem zu verwenden, denke ich:

function<void(int, double)> onSetMin = [this](int dummy, double d) { SetMin(d); }; 
mEventHandler.on(kParamID, onSetMin); 
+0

Du machst meinen Tag! Vielen Dank! – markzzz

0

Verwenden Sie einen Lambda statt std::bind:

mEventHandler.on(kParamID, [this] (int, double value) { 
    SetMin(value); 
}); 

Der Zweck std::bind ist das Gegenteil von dem, was Sie tun möchten: Es hilft Ihnen beim Erstellen einer Funktion unter N Argumente von einer Funktion f unter M, wobei M > N durch einige Argumente von f zu bestimmten Werten (oder/und ändern Sie die ord der Argumente).