有没有办法在 C++ 中推断数组的单个元素的类型
Is there a way to deduce a type of a single element of an array in c++
我在推导 C++ 数组的单个元素的类型时遇到问题。
我想实现这样的目标:
template <class T>
struct array_element { };
template <class T>
struct array_element<T[]> {
using type = T;
};
int main() {
int a[5] = {1, 2, 3, 4, 5};
array_element<decltype(a)>::type element = a[0];
}
但是代码显然编译不通过(int[5]不匹配T[])...
你需要一个额外的专业化参数:
template <class T, size_t N>
struct array_element<T[N]> {
using type = T;
};
或者:
std::remove_reference<decltype(a[0])>::type element = a[0];
或者:
auto element = a[0];
使用std::remove_extent
模板class(C++11)或std::remove_extent_t
别名模板(C++14)获取数组元素的类型(两者都是are declared in type_traits
header file):
std::remove_extent<decltype(a)>::type element0 = a[0];
std::remove_extent_t<decltype(a)> element1 = a[1];
您还可以使用 std::remove_all_extents
(C++11) 或 std::remove_all_extents_t
(C++14) 到 get a type of an element of a multidimensional array。
我在推导 C++ 数组的单个元素的类型时遇到问题。
我想实现这样的目标:
template <class T>
struct array_element { };
template <class T>
struct array_element<T[]> {
using type = T;
};
int main() {
int a[5] = {1, 2, 3, 4, 5};
array_element<decltype(a)>::type element = a[0];
}
但是代码显然编译不通过(int[5]不匹配T[])...
你需要一个额外的专业化参数:
template <class T, size_t N>
struct array_element<T[N]> {
using type = T;
};
或者:
std::remove_reference<decltype(a[0])>::type element = a[0];
或者:
auto element = a[0];
使用std::remove_extent
模板class(C++11)或std::remove_extent_t
别名模板(C++14)获取数组元素的类型(两者都是are declared in type_traits
header file):
std::remove_extent<decltype(a)>::type element0 = a[0];
std::remove_extent_t<decltype(a)> element1 = a[1];
您还可以使用 std::remove_all_extents
(C++11) 或 std::remove_all_extents_t
(C++14) 到 get a type of an element of a multidimensional array。