Как узнать размер массива, который был передан в шаблонную функцию?

Чтобы узнать размер массива, переданного в шаблонную функцию в C++, вам понадобится использовать различные методы, в зависимости от типа массива.

1. Если у вас есть массив фиксированного размера, вы можете использовать оператор sizeof. Например, если у вас есть массив типа int размером 10 элементов:

template <typename T, size_t N>
void PrintArraySize(T (&arr)[N]) {
    std::cout << "Size of array: " << N << std::endl;
}

В данном примере T (&arr)[N] является синтаксисом ссылки на массив фиксированного размера. Размер массива доступен в переменной N, которую вы можете использовать внутри функции для вывода его размера.

2. Если у вас есть массив переменного размера, вы можете воспользоваться функцией std::size, предоставляемой библиотекой STL, начиная с C++17. Например:

template <typename T>
void PrintArraySize(T* arr, size_t size) {
    std::cout << "Size of array: " << std::size(arr) << std::endl;
}

Здесь std::size(arr) возвращает размер массива в байтах, подразумевая, что указатель arr указывает на начало массива.

3. Если вы используете стандартную библиотеку STL, такую как std::vector или std::array, вы можете использовать их методы size() для получения размера:

template <typename T>
void PrintArraySize(const std::vector<T>& vec) {
    std::cout << "Size of vector: " << vec.size() << std::endl;
}

В этом примере vec.size() возвращает текущий размер вектора. Вы можете адаптировать этот код для работы со стандартными контейнерами, такими как std::list, std::deque и т.д.

4. Если вы работаете со строками, такими как std::string, вы можете использовать метод length() или size() для получения длины строки:

template <typename StringType>
void PrintStringLength(const StringType& str) {
    std::cout << "Length of string: " << str.length() << std::endl;
    // или std::cout << "Size of string: " << str.size() << std::endl;
}

В этом примере str.length() возвращает длину строки, а str.size() возвращает ее размер (количество символов).

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