Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取c数组上begin的返回类型_C++_C++11_Templates_Iterator_Decltype - Fatal编程技术网

C++ 获取c数组上begin的返回类型

C++ 获取c数组上begin的返回类型,c++,c++11,templates,iterator,decltype,C++,C++11,Templates,Iterator,Decltype,我想以一种通用的方式获取返回类型std::begin。我目前的解决办法是: using type = decltype(std::begin(std::declval<T>())); 使用type=decltype(std::begin(std::declval()); 当T=std::vector时,它工作。但我不明白为什么以下方法不起作用: using type = decltype(std::begin(std::declval<int[3]>())); 使用

我想以一种通用的方式获取返回类型
std::begin
。我目前的解决办法是:

using type = decltype(std::begin(std::declval<T>()));
使用type=decltype(std::begin(std::declval());
T=std::vector
时,它工作。但我不明白为什么以下方法不起作用:

using type = decltype(std::begin(std::declval<int[3]>()));
使用type=decltype(std::begin(std::declval());
我得到一个错误:

example.cpp:83:60: error: no matching function for call to ‘begin(int [3])’
     using type = decltype(std::begin(std::declval<int[3]>()));
example.cpp:83:60:错误:调用'begin(int[3])没有匹配的函数
使用type=decltype(std::begin(std::declval());
如何以通用方式获取std::begin的返回类型?

的重载是:

或者让别名本身为您提供左值引用:

template <class T>
using type = decltype(std::begin(std::declval<T&>()));

using arr = type<int[3]>; // int*
模板
使用type=decltype(std::begin(std::declval());
使用arr=type;//int*
对我来说,前者似乎更正确,但YMMV

template <class T>
using type = decltype(std::begin(std::declval<T>()));

using arr = type<int(&)[3]>; // int*
template <class T>
using type = decltype(std::begin(std::declval<T&>()));

using arr = type<int[3]>; // int*