如何找出类实例模板的类型?

时间:2021-02-12 14:14:37

标签: c++

我需要找出类模板的类型。

m_class <int> temp{};

是否可以理解它具有“int”或任何其他类型? 我试过了

decltype( temp)

但它回来了

m_clas<int>

我会很高兴得到你的帮助。

2 个答案:

答案 0 :(得分:3)

如果您可以修改 m_class,您可以添加别名:

template <typename T>
struct m_class {
    using type = T;
};

如果没有,你可以写一个类型特征:

template <typename T>
struct m_class_type;

template <typename T>
struct m_class_type<m_class<T>> {
    using type = T;
};

示例:

int main() {
  m_class<int>::type f;
  m_class_type<m_class<int>> g;
}

fg 都是 int

答案 1 :(得分:1)

如果你自己制作了 m_class,你必须自己跟踪 T:

    template <class T>
    class m_class {
    public:
        using type_t = T;
    };

    //...

    m_class<int>::type_t myInt = 42;

STL 容器通常以这种方式保存元素类型信息,例如std::vector<int>::value_type