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*