tem*_*boy 11 c++ arrays templates
考虑:
#include <iostream>
template <typename T> T getArray( T &arr ) {
return *arr;
}
int main() {
int a[] = {5, 3, 6};
std::cout << getArray(a);
}
Run Code Online (Sandbox Code Playgroud)
它假设打印数组中的第一个元素但它不起作用.这是为什么?
它给了我错误:
error: no matching function for call to 'getArray(int [3])'
Run Code Online (Sandbox Code Playgroud)
GMa*_*ckG 12
类型a是int[3],所以类型T是int[3].无法从函数返回数组.
在C++ 11中,您可以这样做:
template <typename T>
auto getArray(T &arr) -> decltype(*arr)
{
return *arr;
}
Run Code Online (Sandbox Code Playgroud)
或这个:
// requires <type_traits>
template <typename T>
typename std::remove_extent<T>::type& getArray(T &arr)
{
return *arr;
}
Run Code Online (Sandbox Code Playgroud)
在C++ 03中你可以做到这一点,但它并不完全相同:
template <typename T>
T getArray(T* arr /* not really an array */)
{
return *arr;
}
Run Code Online (Sandbox Code Playgroud)
要么:
template <typename T, std::size_t N>
T getArray(T (&arr)[N])
{
return *arr;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
539 次 |
| 最近记录: |