提问人:James Franco 提问时间:8/21/2023 最后编辑:DailyLearnerJames Franco 更新时间:8/22/2023 访问量:139
在 C++ 中专门化函数模板
Specializing function templates in C++
问:
我熟悉类专用化,但遇到了这段代码,我认为它是函数专用化
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>(){
...
}
我的问题是为什么
答:
1赞
Nikos Athanasiou
8/21/2023
#1
include_negative
是使用整型的非类型模板参数。bool
在这种情况下没有专业化。template 参数具有固定类型,用作值的占位符。在上述链接中,您将看到“非类型模板参数必须具有结构类型,该结构类型是以下类型之一(可选为 cv 限定,限定符将被忽略):”constexpr
- 左值引用类型(对对象或对函数);
- 整体型;
- 指针类型(指向对象或函数);
- 指向成员类型(指向成员对象或指向成员函数)的指针;
- 枚举类型;
- 标准::nullptr_t;
- 浮点类型;
- 文本类类型 (...)
评论
average<true>( )
average<false>( )