作为默认模板参数的具体函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作为默认模板参数的具体函数相关的知识,希望对你有一定的参考价值。
在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;
声明为类成员来做到这一点。
以上是关于作为默认模板参数的具体函数的主要内容,如果未能解决你的问题,请参考以下文章
C++中,为啥函数参数不够也可以调用?而且函数模板定义中没有提供默认值。