以下是一些代码,其中函数模板将函数作为模板非类型参数调用:
PHP Version: 5.6.36
XAMPP v5.6.36 installed
有没有办法让它可以调用而不需要重复函数返回类型,如template <class R, R func() >
auto Call() -> R
{
return func();
}
int f() { return 1; }
int main()
{
Call<int, f>(); // OK
Call<f>(); // Error
}
?
可以通过预处理器Call<f>()
完成,但我想知道是否可以在没有预处理器的情况下完成。
答案 0 :(得分:3)
这是auto
模板参数旨在解决的问题(C ++ 17及更高版本)。
#include <cstdio>
#include <type_traits>
template <auto Fn>
auto Call() -> decltype(Fn()) {
return Fn();
}
int f() { return 1; }
int main() {
printf("%d\n", Call<f>());
}