W.F*_*.F. 14 c++ templates sfinae type-traits c++11
我在推导一个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];
}
Run Code Online (Sandbox Code Playgroud)
但是代码显然不能编译(int [5]与T []不匹配)...
Max*_*kin 12
您需要额外的参数来进行专业化:
template <class T, size_t N>
struct array_element<T[N]> {
using type = T;
};
Run Code Online (Sandbox Code Playgroud)
或者:
std::remove_reference<decltype(a[0])>::type element = a[0];
Run Code Online (Sandbox Code Playgroud)
要么:
auto element = a[0];
Run Code Online (Sandbox Code Playgroud)
Con*_*tor 12
使用std::remove_extent模板类(C++ 11)或std::remove_extent_t别名模板(C++ 14)来获取数组元素的类型(两者都在type_traits头文件中声明):
std::remove_extent<decltype(a)>::type element0 = a[0];
std::remove_extent_t<decltype(a)> element1 = a[1];
Run Code Online (Sandbox Code Playgroud)
您还可以使用std::remove_all_extents(C++ 11)或std::remove_all_extents_t(C++ 14)来获取多维数组的元素类型.
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |