C++ Как привязать любую функцию к классу?

Рейтинг: 1Ответов: 1Опубликовано: 06.03.2023

Всем привет! Ситуация такая: есть класс, есть в нем какой-то метод, который должен принимать любое число параметров (разных) и есть функция, объявленная например глобально, как сделать так, чтобы при вызове этого метода класса вызывалась именно эта глобальная функция или же любая другая с параметрами, которые будут переданы методу класса, ее вызывающему?

Т.е. чтобы редактировать метод класса под каждую функцию не нужно было. Что-то пробовал с указателями на функцию, но ничего путного не придумал. Может можно как-то с шаблонами поиграться? Предпочтительнее вариант без шаблонов (т.е. когда функция не будет инстанцирована много раз для каждой другой вызываемой функции)

Все это нужно для самодельного класса кнопки, у которой есть метод activate( *something*), который вызывается при ее нажатии и должен вызвать любую функцию, принимающую something параметры. Как сделать такой метод и как хранить какую именно функцию он должен вызывать?

Ответы

▲ 4

Правильно так:

template <typename ...P>
decltype(auto) foo(P &&... params)
{
    return bar(std::forward<P>(params)...);
}

А совсем правильно так:

template <typename ...P>
auto foo(P &&... params)
noexcept(noexcept(bar(std::forward<P>(params)...)))
-> decltype(bar(std::forward<P>(params)...))
{
    return bar(std::forward<P>(params)...);
}