📅  最后修改于: 2023-12-03 15:29:54.545000             🧑  作者: Mango
C++中的模板非类型参数是一种非常强大的技术,在模板的实例化过程中,可以为模板参数提供一些非类型的值,包括整数、指针和枚举等。
非类型参数可以在函数和类模板中定义,其语法如下:
template <typename T, int N> // 定义一个模板,其中有一个非类型参数N
class MyClass {
public:
void func() {
// 使用非类型参数N
}
};
template <int N>
void foo() {
// 使用非类型参数N
}
int main() {
MyClass<int, 10> myObj; // 实例化一个MyClass对象,其中N被设为10
foo<20>(); // 调用foo函数,其中N被设为20
return 0;
}
以下是一个简单示例,演示了如何利用模板非类型参数求一个整数的平方:
#include <iostream>
using namespace std;
template <int N>
struct Square {
enum { value = N*N };
};
int main() {
cout << Square<5>::value << endl; // 输出25
return 0;
}
在这个示例程序中,我们定义了一个模板结构体Square
,其中有一个非类型参数N
,它的值在编译时被确定为5。在这个结构体中,我们使用了enum
来定义了一个常量value
,该常量的值为N*N
,即5*5=25。在main
函数中,我们实例化了一个Square
模板,并输出了其value
成员的值。