从数组的类型中找出元素的类型

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)

Cor*_*mer 5

您可以使用std::remove_all_extents,以及

return typeid(typename std::remove_all_extents<T>::type).name();
Run Code Online (Sandbox Code Playgroud)

该文档说明

如果T是某种类型的多维数组X,则提供type等于的成员 typedef X,否则类型为T

因此它将删除数组类型以获取该数组中包含的基础类型