Sly*_*erZ 3 c++ arrays templates metaprogramming
假设我有一个类型T,它保证是一个数组(例如。int[32])。如何从数组的类型中获取元素的类型?
我找到了一种方法,但它涉及声明一个虚拟临时变量,我想避免这种情况:
#include <iostream>
#include <typeinfo>
using namespace std;
template <typename T>
string getArrayType() {
// Is there a better way to do this?
T dummy;
return typeid(dummy[0]).name();
}
int main() {
cout << getArrayType<int[1]>() << endl; // i
cout << getArrayType<float[1]>() << endl; // f
}
Run Code Online (Sandbox Code Playgroud)
您可以使用std::remove_all_extents,以及
return typeid(typename std::remove_all_extents<T>::type).name();
Run Code Online (Sandbox Code Playgroud)
该文档说明
如果
T是某种类型的多维数组X,则提供type等于的成员 typedefX,否则类型为T。
因此它将删除数组类型以获取该数组中包含的基础类型
| 归档时间: |
|
| 查看次数: |
541 次 |
| 最近记录: |