Используйте любой тип в параметре функции в C ++ - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь найти способ сделать эту функцию более общей c.

  void addStage(Image (f)(Image));

То, что я хочу получить, - это то, что может принимать различные типы функций с параметрами или без них, недействительными или нет.

Я пробовал что-то подобное, но, конечно, это не работает.

void addStage(auto (f)(auto));

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

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Используйте SFINAE:

template<class T>
std::enable_if_t<std::is_function_v<T>, void> addStage(T* f) {
    ...
}

Но, если вам не нужна особая проверка (если T - функция или нет), вы можете просто использовать template и оставить составить все проверки:

template<class T>
void addStage(T f) {
   ...
}
1 голос
/ 09 мая 2020
template <typename AnyFunction>
void addStage(AnyFunction f) {
  // implement in header file!
}
...