Вы можете сохранить аргументы шаблона в элементе данных класса типа std::tuple
и использовать std::apply
, чтобы применить сохраненные аргументы к предоставленной функции.
Итак, допустим, у вас есть класс Action
, подобный этому:
template <typename... Args>
class Action {
std::tuple<Args...> args_;
public:
Action() = default;
Action(Args&&... args)
: args_(std::forward<Args>(args)...)
{}
void args(Args&&... args) {
args_ = std::make_tuple<Args...>(std::forward<Args>(args)...);
}
template <typename F>
void apply(F&& fun) {
std::apply(std::forward<F&&>(fun), args_);
}
};
, где вы устанавливаете аргументы через конструктор Action action(1, 2, 3);
или через отдельную функцию action.set(3, 2, 1);
.
Тогда ваш Основная функция может выглядеть следующим образом:
int main() {
Action action(1, 2);
action.apply([](int a, int b) {
std::cout << "a + b = " << (a + b) << std::endl;
});
return 0;
}
Проверка Пример в реальном времени