Шаблонные аргументы без типа в C ++

Опубликовано: 30 Ноября, 2021

Предварительное условие: шаблоны на C ++

Обычно шаблон C ++ с одним аргументом выглядит так:

template<typename template_name>

Но было замечено, что шаблон может иметь несколько аргументов. Синтаксис того же будет:

template<class T1, class T2, class T3, ………, class Tn>

where, n is the number of arguments.

Также возможно использовать аргументы, не относящиеся к типу (базовые / производные типы данных), т.е. помимо аргумента типа T, он также может использовать другие аргументы, такие как строки, имена функций, константные выражения и встроенные типы данных.

Пример 1:

шаблон <класс T, размер int>
class Array {
частный:

    // Автоматическая инициализация массива
    T Arr [размер]
    .....
    .....
};

Объяснение:

В приведенном выше примере шаблон предоставляет размер массива в качестве аргумента. Это означает, что размер массива известен компилятору во время самой компиляции. Аргументы необходимо указывать всякий раз, когда создается шаблонный класс.

Пример 2:

// Массив из 10 целых чисел
Массив <int, 10> a1

// Массив из 5 чисел типа double
Массив <double, 5> a2

// Строка размером 9 
Массив <char, 10> a3 

где размер задается в качестве аргумента для класса шаблона.

Ниже приведены допустимые аргументы:

  • Постоянные выражения
  • Адреса функций или объектов с внешней связью
  • Адреса статических членов класса.

Ниже приведена программа для иллюстрации нетиповых шаблонов:

C ++

// C++ program to implement bubble sort
// by using Non-type as function parameters
#include <iostream>
using namespace std;
// Function to swap two numbers
template < class T>
void swap_(T* x, T* y)
{
T temp = *x;
*x = *y;
*y = temp;
}
// Function to implement the Bubble Sort
template < class T, size> int
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 < class T, size> int
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< float , size_arr>(arr);
cout << "Sorted Array is: " ;
printArray< float , size_arr>(arr);
return 0;
}
Выход:
Сортированный массив: 0,3, 0,6, 1,1, 1,2, 1,56, 4,55
Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .