gpt4 book ai didi

c++ - 允许各种函数类型的非类型模板参数?

转载 作者:行者123 更新时间:2023-11-30 02:19:38 24 4
gpt4 key购买 nike

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

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>()

可以通过预处理器完成,#define CALL(f) Call<decltype(f()), f> , 但我想知道是否可以在没有预处理器的情况下完成。

最佳答案

这就是 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

关于c++ - 允许各种函数类型的非类型模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50575289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com