📜  C++中的模板非类型参数

📅  最后修改于: 2021-05-30 14:46:54             🧑  作者: Mango

先决条件: C++中的模板

通常,带有单个参数的C++模板如下所示:

但是已经看到,模板可以具有多个参数。相同的语法为:

也可以使用非类型参数(基本/派生数据类型),即,除了类型参数T外,还可以使用其他参数,例如字符串,函数名称,常量表达式和内置数据类型。

范例1:

template 
class Array {
private:

    // Automatic array initialization
    T Arr[size]
    .....
    .....
};

解释:

在上面的示例中,模板提供了数组的大小作为参数。这意味着编译器本身在编译时就知道数组的大小。每当创建模板类时都必须指定参数。

范例2:

// Array of 10 integers
Array a1

// Array of 5 double type numbers
Array a2

// String of size 9 
Array  a3 

where size is given as an argument to the template class.

以下是允许的参数:

  • 常数表达式
  • 具有外部链接的函数或对象的地址
  • 静态类成员的地址。

下面是说明非类型模板的程序:

C++
// C++ program to implement bubble sort
// by using Non-type as function parameters
#include 
using namespace std;
  
// Function to swap two numbers
template 
void swap_(T* x, T* y)
{
    T temp = *x;
    *x = *y;
    *y = temp;
}
  
// Function to implement the Bubble Sort
template 
void bubble_sort(T arr[])
{
    for (int i = 0; i < size - 1; i++) {
  
        // Last i elements are already
        // in place
        for (int j = 0; j < size - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
  
                // Swap operation
                swap_(&arr[j], &arr[j + 1]);
            }
        }
    }
}
  
// Function to print an array
template 
void printArray(T arr[])
{
    int i;
    for (i = 0; i < size - 1; i++) {
        cout << arr[i] << ", ";
    }
  
    cout << arr[size - 1] << endl;
}
  
// Driver Code
int main()
{
    // Given array arr[]
    float arr[] = { 1.1, 1.2, 0.3, 4.55, 1.56, 0.6 };
    const int size_arr = sizeof(arr) / sizeof(arr[0]);
  
    // Size of the array passed as
    // an argument to the function
    bubble_sort(arr);
  
    cout << "Sorted Array is: ";
    printArray(arr);
  
    return 0;
}


输出:
Sorted Array is: 0.3, 0.6, 1.1, 1.2, 1.56, 4.55
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”