Код: Выделить всё
void MyObnoxiousLongClassName::SomeFunction(int a, int b);
auto MyObnoxiousLongClassName::MakeSomeCallback() {
// for now I'm returning this, but in reality it would be passed to a consumer
return std::bind_front(&MyObnoxiousLongClassName::SomeFunction, this);
}
void MyOtherSimilarlyNamedClass::AnOtherFunction(float y);
auto MyOtherSimilarlyNamedClass::DoSomethingElse() {
return std::bind_front(&MyOtherSimilarlyNamedClass::AnOtherFunction, this);
}
< /code>
Это работает, но довольно уродливо. Если бы я хотел синхронно вызвать некоторую функцию , что я хотел бы, это что-то вроде этого:
auto MyObnoxiousLongClassName::MakeSomeCallback() {
return BIND_THIS(SomeFunction);
}
auto MyOtherSimilarlyNamedClass::DoSomethingElse() {
return BIND_THIS(AnOtherFunction);
}
Однако я не мог понять, как достичь функциональности Bind_this .
Это почти работает:
Код: Выделить всё
#define BIND_THIS(_fn) std::bind_front(&decltype(*this)::_fn, this)
Мой компилятор - GCC 13.3.0.
Подробнее здесь: https://stackoverflow.com/questions/796 ... r-function
Мобильная версия