Шаблонные аргументы без типа в C ++
Предварительное условие: шаблоны на 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