C++ 有没有办法获取存储在变量或成员指针中的基类型?

C++ 有没有办法获取存储在变量或成员指针中的基类型?,c++,type-deduction,C++,Type Deduction,考虑以下代码 #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"

考虑以下代码

#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;
}
#包括
#包括
A类{};
B类:公共A{};
C类:公共A{};
空解析类型(A*基)
{ 

std::cout是。只需取消引用指针并应用
typeid

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

std::cout是。只需取消引用指针并应用
typeid

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

std::cout从逻辑上讲,如果可能的话,我希望避免使用模板…现在不要在计算机前使用模板,但是…首先,你的类不是多态的。其次,如果你使它们多态并使用typeid(base)如果没有所有的decltype内容work@linuxfever很明显,但我试图扣除使用它的类型…正如我看到的,我猜是不可能的…大多数时候,问你的问题表明已经做出了一个糟糕的设计选择,现在是时候备份和重新评估你以前的选择了。你认为你为什么需要这样做?@JaMiT for通过一个实例覆盖另一个类中的现有虚拟方法…我不想用无用的方法填充我的类…从逻辑上讲,如果可能的话,我希望避免使用模板…现在不要在计算机面前,但是…首先,你的类不是多态的。其次,如果你使它们多态并使用typeid(base)如果没有所有的decltype内容work@linuxfever很明显,但我试图扣除使用它的类型…正如我看到的,我猜是不可能的…大多数时候,问你的问题表明已经做出了一个糟糕的设计选择,现在是时候备份和重新评估你以前的选择了。你认为你为什么需要这样做?@JaMiT for通过实例覆盖另一个类中的现有虚拟方法…我不想用无用的方法填充我的类…我将
typeid::name()放在
只针对log,但我说的是类型本身…@nikomaster当然你不能在编译时获得运行时类型…如果那样,你必须传递原始类型。我把
typeid::name()放在
只针对log,但我说的是它自己的类型…@nikomaster当然你不能在编译时获得运行时类型…如果那样的话,你必须传递原始类型。