C ++: Шаблон, который принимает любую функцию с одним параметром? - PullRequest
1 голос
/ 21 января 2012

В принципе, я хотел бы иметь возможность передавать функцию_A с любым параметром в T_function, чтобы функция T_function могла выполнять некоторые команды, а затем вызывать переданную функцию

.с (что может сделать мою цель более ясной):

template <typename t_return, typename t_param>
void foo(t_return (*func)(t_param), t_param p)
{
    //do code
    func(p);
}

foo<void, int>(&someFunc, someInt);

Приведенный выше код прекрасно работает, но кажется утомительным.Я также не уверен, насколько это глупо.У кого-нибудь с немного большим пониманием есть улучшение?Я пытался найти это в Интернете, однако его оказалось трудно найти.

1 Ответ

4 голосов
/ 21 января 2012

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

template <typename F, typename T>
void foo (F func, const T& p)
{
    // do code
    func(p);
}

foo(&someFunc, someInt);

Это также имеет то преимущество, что функциональные объекты могут поддерживаться. (Это также, как стандартная библиотека («STL») поддерживает передачу функций в алгоритмы.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...