вызов функции в шаблоне в зависимости от количества параметров - PullRequest
0 голосов
/ 17 сентября 2018

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

template<typename T>
int func(T function)
{
  int a = 0; // some value computed in func
  int b = 10; // another value computed in func
  return function(a, b);
}

int main()
{
  int res = func([](int a, int b)
  {
    // do somthing
    return 0;
  }
  );

  return 0;
}

Я хотел бы написать что-то вроде

int res2 = func([](int a) // needs only parameter a
{
  // do somthing
  return 0;
}
);

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

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете использовать SFINAE:

template <typename F>
auto func(F f) -> decltype(f(42, 42))
{
    int a = 0;
    int b = 10;
    return f(a, b);
}

template <typename F>
auto func(F f) -> decltype(f(42))
{
    int a = 51;
    return f(51);
}

А затем используйте его

int res = func([](int a, int b) { return a + b; } );
int res2 = func([](int a) { return a * a; } ); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...