Как я могу сделать шаблон функции variadi c с указателем на функцию в качестве аргумента не тип? - PullRequest
0 голосов
/ 20 февраля 2020

то, чего я хочу достичь, это создать храм, подобный следующему:

template<type R, type T, type S, auto F, class ...Fargs>
R create(T input, Fargs... fargs)
{
  S a = F(input, fargs ...);
  return some_func(a, input.b);
} 

Тогда я бы хотел назвать его как

int x = create<int, SomeClass, float, SomeFunc_to_apply>(2, someObj, 8.0f, 3, "whatever", "it", "needs");

1 Ответ

0 голосов
/ 20 февраля 2020

Вы можете немного упростить:

template <auto F, typename T, class ...Fargs>
decltype(auto) create(T input, Fargs... fargs)
{
  auto a = F(input, fargs ...);
  return some_func(a, input.b);
}

И использовать его:

SomeClass someObj;
float SomeFunc_to_apply(SomeClass, float, int, const char*, const char*, const char*);
int x = create<SomeFunc_to_apply>(someObj, 8.0f, 3, "whatever", "it", "needs");

Демо

...