非类型模板参数允许各种函数类型?

时间:2018-05-29 01:47:34

标签: c++ function templates non-type

以下是一些代码,其中函数模板将函数作为模板非类型参数调用:

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>()完成,但我想知道是否可以在没有预处理器的情况下完成。

1 个答案:

答案 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>());
}

http://coliru.stacked-crooked.com/a/55808ba25f0a07cd