Как `bind_front ()` Указатель `this` в функции члена?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как `bind_front ()` Указатель `this` в функции члена?

Сообщение Anonymous »

Я пишу асинхронную программу, тяжелую обратную связь, и общий шаблон, с которым я сталкиваюсь, заключается в функции, необходимой для обратного вызова, указывающего на другую функцию члена.

Код: Выделить всё

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>
Это работает, но довольно уродливо. Если бы я хотел синхронно вызвать некоторую функцию 
в makeomecallback вместо асинхронно, я бы просто назвал некоторую функцию (1, 2); , и я хочу что-то подобное для Async.
, что я хотел бы, это что-то вроде этого:
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)
За исключением того, что Decktype указателя Dereference - это t & вместо t . Использование typeof или typeid вместо deckspec приводит к еще большему количеству ошибок дикого компилятора.
Мой компилятор - GCC 13.3.0.

Подробнее здесь: https://stackoverflow.com/questions/796 ... r-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»