c++ - 具体函数作为默认模板参数
问题描述
是否可以在 C++ 中设置为默认模板参数具体(免费)函数?
我的意思是这样的:
void foo() {}
template <typename F = foo>
struct C
{
F f;
};
解决方案
函数指针是非类型模板参数。
template <auto F = &foo> // c++17
template <void(*F)() = &foo>
这是一个完整的例子:
#include <iostream>
void foo() { std::puts("foo"); }
void bar() { std::puts("bar"); }
template <void (*F)() = &foo>
struct Foo {
void exec() { F(); }
};
int main() {
Foo a;
Foo<&bar> b;
a.exec(); // prints "foo"
b.exec(); // prints "bar"
}
如果您出于某种原因必须存储函数指针(就像您在代码段中所做的那样),您可以通过声明decltype(F) f = F;
为类成员来实现。
推荐阅读
- ajax - ASP.NET Core PageRequestManager Ajax 调用等效
- vb.net - 如何在我的 vb.net 应用程序中拥有像 vb.net 工具箱这样的左侧菜单
- android - 我想获取图片网址但 getDownloadUrl() 不起作用?
- apache-spark - Spark 2.3.3 将镶木地板输出到 S3
- android - Android Studio:从 DialogFragment 打开片段
- excel - 以编程方式将 Excel 中的宏分配给从文件添加的图片
- c# - 如何修复此“OutOfMemoryException”,为什么我只使用 4/16 GB 会得到它?
- javascript - 动态 v-model 作为带有键 VueJs 的数组对象
- c++ - 如何在 TCP 侦听器中处理异步发送和接收
- c++ - 用引用实现c++“移动”不是更简单吗?