C++ 在不知道其类型的情况下将数组传递给函数
C++ pass an array to a function without knowing its type
我想创建一个函数,将数组作为任何类型的参数,returns 其长度如下例所示:
unsigned int getLength(array)
{
return sizeof(array) / sizeof(array[0])
}
我不知道是否可以在不知道其类型的情况下传递数组,我希望我能很好地解释我的问题,谢谢...
您可以使用如下所示的模板。特别地,我们可以利用模板非类型参数N
来表示传递数组的长度和模板类型参数T
表示数组内部元素的类型。
template<typename T, std::size_t N>
//--------------------------v--------------->type of elements inside array named arr
std::size_t getLength(const T (&arr)[N])
//-----------------------------------^------>length of the array
{
return N ;
}
int main()
{
int arr[] = {1,2,3};
std::cout<<getLength(arr)<<std::endl;
std::string arr2[] = {"a", "b"};
std::cout<<getLength(arr2)<<std::endl;
return 0;
}
注意 C++17 还有一个使用 std::size
的选项。
我想创建一个函数,将数组作为任何类型的参数,returns 其长度如下例所示:
unsigned int getLength(array)
{
return sizeof(array) / sizeof(array[0])
}
我不知道是否可以在不知道其类型的情况下传递数组,我希望我能很好地解释我的问题,谢谢...
您可以使用如下所示的模板。特别地,我们可以利用模板非类型参数N
来表示传递数组的长度和模板类型参数T
表示数组内部元素的类型。
template<typename T, std::size_t N>
//--------------------------v--------------->type of elements inside array named arr
std::size_t getLength(const T (&arr)[N])
//-----------------------------------^------>length of the array
{
return N ;
}
int main()
{
int arr[] = {1,2,3};
std::cout<<getLength(arr)<<std::endl;
std::string arr2[] = {"a", "b"};
std::cout<<getLength(arr2)<<std::endl;
return 0;
}
注意 C++17 还有一个使用 std::size
的选项。