Допустим, вы уже объявили f2
, как в своем примере, и хотите использовать его сейчас с makecontext
.Вместо того, чтобы пытаться разыграть его, используйте std::bind
(находится в заголовке ), чтобы создать объект, который можно вызвать как void(*)(void)
:
auto f3 = std::bind(f2, 0);
makecontext(&c, f3, 1, 123);
Объект f3
является функциейобъект, который можно вызвать без каких-либо аргументов.Конечным результатом является то, что f2
в итоге вызывается с 0 в качестве аргумента.Если вы предпочитаете, чтобы другое значение было передано f2
, вы можете указать его в качестве второго аргумента для bind
.
Редактировать
Как указали несколько комментаторов, это не 'Это применимо в вашем случае, так как makecontext
требует фактического указателя на функцию.Итак, для справки, я подумал, что хотел бы указать на одну оговорку, с которой вы можете столкнуться (в случае, если вы этого еще не знаете): использование лямбды в качестве указателя на функцию работает, только если вы не используете замыкания.Как только вы закрываете переменные, лямбда больше не может вырождаться в указатель на функцию, как это может происходить без замыкания.