Czy istnieje biblioteka, która pozwala mi łatwo i wygodnie tworzyć wywołania zwrotne zorientowane obiektowo w języku C++?Callbacks zorientowane na obiekt dla C++?
język Eiffla ma na przykład pojęcie „środki”, które bardziej lub mniej pracy tak:
class Foo{
public:
Bar* bar;
Foo(){
bar = new Bar();
bar->publisher.extend(agent say(?,"Hi from Foo!", ?));
bar->invokeCallback();
}
say(string strA, string strB, int number){
print(strA + " " + strB + " " + number.out);
}
}
class Bar{
public:
ActionSequence<string, int> publisher;
Bar(){}
invokeCallback(){
publisher.call("Hi from Bar!", 3);
}
}
wyjściowe będą: Hi z baru! 3 Cześć z Foo!
A więc - agent pozwala na kapsułkę funkcji członkowskiej w obiekcie, przekazując ją według pewnych zdefiniowanych parametrów wywołania (Hi z Foo), określa parametry otwarte (?) I przekazuje je do innego obiektu, który może następnie wywołać to później.
Ponieważ C++ nie pozwala na tworzenie wskaźników funkcyjnych na niestatycznych funkcjach składowych, nie wydaje się, aby tak proste było zaimplementowanie czegoś tak łatwego w użyciu w języku C++. Znalazłem kilka artykułów z google na temat wywołań zwrotnych zorientowanych obiektowo w języku C++, jednak w rzeczywistości szukam plików bibliotecznych lub nagłówkowych, które po prostu mogę zaimportować, co pozwala mi na użycie podobnej eleganckiej składni.
Ktoś ma dla mnie wskazówki?
Dzięki!
Nie jestem pewien, czy całkowicie rozumiem twoją składnię, ale 'boost :: bind' może być użyty do spakowania zarówno funkcji, jak i funkcji składowych za pomocą odpowiedniego interfejsu do obiektu. http://www.boost.org/doc/libs/1_44_0/libs/bind/bind.html#with_member_pointers –
hej! tak, myślę, że tego właśnie szukam. niestety nie mogę skompilować doładowania dla iPhone'a (rozwijającego się na iPhonie). Czytałem, że jest to również możliwe ze stl. Czy ktoś może wytłumaczyć jak? – Mat