How to write a template function that takes an array and an int specifying array size

喜夏-厌秋 提交于 2020-05-15 02:33:10

问题


For a university exercise, I have been asked to write a template function "print();", which takes two arguments, 1: an array of a generic type, and 2: an int specifying the size of the array. The function should then print out every item in the array to the console. I am having some trouble with the function arguments. The code I currently have is:

   template <typename Type>
   Type print (Type a, Type b)
    {
        Type items;
        Type array;
        a = array;
        b = items;

        for (int i = 0; i < items; i++) {
        std::cout << std::endl << "The element of the index " << i << " is " << array << std::endl;
        std::cout << std::endl;
    }

and in main():

    print(Array[], 10);

Obviously putting Array as an argument isn't returning a value, so I am not sure what else to do. Any ideas?


回答1:


The correct way to write it is

Live On Coliru

#include <iostream>

template <typename T, size_t size> void print(const T (&array)[size])
{
    for(size_t i = 0; i < size; ++i)
        std::cout << array[i] << " ";
}

int main() {
    int arr[] = { 1,2,3,4,99};

    print(arr);
}

Prints

1 2 3 4 99



回答2:


If you want to pass the array by reference, you could

template <typename T, size_t SIZE>
void print(const T(&array)[SIZE])
{
    for (size_t i = 0; i < SIZE; i++)
        std::cout << array[i] << " ";
}

and then, e.g.

int x[] = {1, 2, 3};
print(x);

LIVE

Otherwise, you can pass it by pointer, note that the array will decay to pointer, and you have to guarantee the correctness of SIZE being passed.

template <typename T>
void print(const T array[], size_t SIZE)
{
    for(size_t i = 0; i < SIZE; i++)
        std::cout << array[i] << " ";
}

and then, e.g.

int x[] = {1, 2, 3};
print(x, sizeof(x) / sizeof(int));

LIVE



来源:https://stackoverflow.com/questions/33234979/how-to-write-a-template-function-that-takes-an-array-and-an-int-specifying-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!