首页 > 解决方案 > 有什么方法可以将基本类型存储在变量或成员指针中?

问题描述

考虑以下代码

#include <type_traits>
#include <iostream>

class A {};

class B : public A {};

class C : public A {};


void parseType(A* base)
{ 
   std::cout << typeid(std::remove_pointer<decltype(base)>::type).name() << "\n";
}


int main(int argc, char** argv)
{
    A* a = new B;

    A* b = new C;

    parseType(a); // outputs A

    parseType(b); // outputs A

    return 0;
}

有什么方法可以base从函数中获取存储在参数中的类型parseType()?从字面上看,它就是base类型。

标签: c++type-deduction

解决方案


是的。只需取消引用指针并应用typeid

void parseType(A* base)
{ 
    std::cout << typeid(*base).name() << "\n";
}

原因是如果操作数是多态类型的左值表达式typeid,它将在运行时评估操作数。在您的原始示例中,是一个编译时操作并提取 的静态类型,所以它总是.decltypebaseA

请注意,这需要A至少有一个虚拟成员函数,以便它符合多态类型的条件。另外,你忘了#include <typeinfo>


推荐阅读