非类型模板参数允许各种函数类型?
Non-type template argument to allow various function types?
下面是一些代码,其中函数模板将要调用的函数作为模板非类型参数:
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("%dn", Call<f>());
}
http://coliru.stacked-crooked.com/a/55808ba25f0a07cd
相关文章:
- 将空*参数转换为各种类型的参数是UB吗?
- 如何使用模板根据类型将元素添加到各种容器中
- zlib 添加的各种类型的目的是什么,我如何使用它们?
- 返回各种类型的函数的SWIG类型映射
- 非类型模板参数允许各种函数类型?
- 使用各种数据类型成员创建对象的简便方法
- 各种 OpenCL 样板类型是否可以安全复制
- 要求将各种类型的各种类型传递给微控制器上的规则引擎.施放问题
- 如何使用同一链接列表一次处理各种类型的节点
- 使用LLVM计数各种类型的指令数量
- cpp函数来检索各种数据类型的值
- 在相同状态类型的各种屏幕之间切换
- 如何使用ODEINT的标签系统为各种步进器类型做特定工作
- 各种类型的编译器优化
- 各种数据类型的变量如何存储在C++(本机)二进制文件中
- 如何返回可变数量的各种类型的容器
- 有了父子类层次结构,如何在单个 "Parent" 类型变量中保存各种实际子级?
- 如何为各种模板类型构建哈希函数
- std::tr1::将各种类型的函数对象存储在公共容器中
- 如何在c++中输入和输出各种文件类型