2016-04-10 4 views
1

In C++ 11 befindet sich ein std::bind Verfahren gegeben rvalue oder lvalue Verweise auf Parameter einer Funktion zu verbinden, die gegebenen Parameter zu übergeben, während Funktionsaufruf zB:Bindungsfunktion Ergebnis in C++

#include <functional> 
#include <iostream> 

int foo(int x, int y) { 
    return x + y; 
} 

int main() { 
    std::function<int(void)> f = std::bind(foo, 1, 2); 
    std::cout << f() << std::endl; 
} 

Meine Frage gibt es ein in Verfahren gebaut um das Ergebnis der Funktion Referenz einer variablen zu binden, der Lage sein, etwas zu tun:

#include <functional> 
#include <iostream> 

int foo(int x, int y) { 
    return x + y; 
} 

int main() { 
    int result; 
    std::function<void(int, int)> f = bind_result(foo, result); 
    f(1, 2); 
    std::cout << result << std::endl; 
} 
+1

Es gibt keine xValue Referenz. – Barry

+0

Sie haben recht, ich wollte Lvalue oder Rvalue Referenz in kurzen sagen –

Antwort

3

Verwenden einer Lambda:

int result; 
auto f = [&result](int a, int b){ result = foo(a, b); }; 

Wenn Sie wollen etwas, das beliebige Argumente weiterleitet, können Sie eine variadische Vorlage verwenden:

auto fvar = [&result](auto... args) { 
    result = foo(std::forward<decltype(args)>(args)...); 
}; 
+0

[Demo] (https://ideone.com/74gx6O), [Weiterleitung Demo] (https://ideone.com/ttqmxx) –

+0

Natürlich, Warum habe ich nicht darüber nachgedacht ?! –