我无法获得元素的类型。此解决方案返回对元素类型的引用。
int arr[] = { 0, 1, 2, 3, 4, 5 };
using arrElemType = decltype(*arr);
vector<arrElemType> vec(std::cbegin(arr), std::cend(arr));
答案 0 :(得分:10)
尝试以下
using arrElemType = std::remove_reference<decltype( *arr )>::type;
或
typedef std::remove_reference<decltype( *arr )>::type arrElemType;
您需要包含标题<type_traits>
答案 1 :(得分:2)
C ++ 11及更高版本中的标准方法是使用std::remove_all_extents
。
#include <type_traits>
int arr[] = { 0, 1, 2, 3, 4, 5 };
using arrElemType = std::remove_all_extents<decltype(arr)>::type;
vector<arrElemType> vec(std::cbegin(arr), std::cend(arr));
答案 2 :(得分:-1)
如果为元素定义了 +
运算符:
int arr[] = { 0, 1, 2, 3, 4, 5 };
using arrElemType = decltype(+arr[0]); // + is the key
vector<arrElemType> vec(std::cbegin(arr), std::cend(arr));
<type_traits>
标题不是必需的。+arr[0]
表达式变为 prvalue,decltype 推导出为 T。decltype(arr[0])
给出了 T&,这在这里是不可取的。arr[1000]
没有关系。请参阅 compiler explorer 上的代码。