Рассмотрим следующий случай: I
int bar1();
double bar2();
Я хочу:
foo<bar1>(); // calls bar1, then uses its result.
foo<bar2>(); // calls bar2, then uses its result.
Наивный способ написать шаблон foo - использовать дополнительный параметр:
template <typename T, T (*f)()> void foo () {
// call f, do something with result
}
Это работает, но мне нужно сделать уродливый синтаксис:
foo<decltype(bar1()), bar1>(); // calls bar1, then uses its result
Я хочу написать что-то красивое, как показано выше, только foo<bar1>
.
P.S. Не рекомендуется принимать аргумент во время выполнения. Мне нужна компиляция времени параметризации только с указателем функции.
P.S. Извините забудьте отметить: Я ищу С++ 14 решение. С++ 17 оценил, и я ответил на ответ с помощью решения С++ 17, но проект теперь строит с С++ 14, и я не могу его изменить в ближайшем будущем.