在 C++ 中专门化函数模板

Specializing function templates in C++

提问人:James Franco 提问时间:8/21/2023 最后编辑:DailyLearnerJames Franco 更新时间:8/22/2023 访问量:139

问:

我熟悉类专用化,但遇到了这段代码,我认为它是函数专用化

A:
template <bool include_negatives>
int average(int* array, int len) {
....
}

我可以将上面的内容改写为这样.我知道我正在专攻一门课,所以我需要提供 B。我的问题是 A 中发生了什么。为什么它不需要泛型类型,因为它是专用的。C

B:
template<typename t>
int average(){

}

C:
template<>
int average<bool>(){
  ...
}

我的问题是为什么

C++ C++11 模板 专用化

评论

1赞 Jarod42 8/21/2023
“我的问题是为什么这样做”。似乎未完成的问题...有两种人,那些可以推断的人。
1赞 tkausl 8/21/2023
看起来不像专业化。只是一个函数模板。
0赞 BoP 8/21/2023
不回答这个问题,但如果你有一个布尔模板,你必须将它们称为 和 这也可能是两个非模板函数。average<true>( )average<false>( )

答:

1赞 Nikos Athanasiou 8/21/2023 #1

include_negative是使用整型的非类型模板参数bool

在这种情况下没有专业化。template 参数具有固定类型,用作值的占位符。在上述链接中,您将看到“非类型模板参数必须具有结构类型,该结构类型是以下类型之一(可选为 cv 限定,限定符将被忽略):”constexpr

  • 左值引用类型(对对象或对函数);
  • 整体型;
  • 指针类型(指向对象或函数);
  • 指向成员类型(指向成员对象或指向成员函数)的指针;
  • 枚举类型;
  • 标准::nullptr_t;
  • 浮点类型;
  • 文本类类型 (...)