作为默认模板参数的具体函数

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++中,为啥函数参数不够也可以调用?而且函数模板定义中没有提供默认值。

零值初始化&字符串常数作为函数模板参数

如何将构造函数(可变参数)作为模板参数传递?

[C++11]函数模板的默认模板参数

C++11新特性:8—— C++11支持函数模板的默认模板参数

C++11之模板别名&函数模板的默认模板参数