【发布时间】:2019-08-05 23:00:43
【问题描述】:
考虑下面的代码
#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;
}
有什么方法可以从函数parseType() 获取存储在base 参数中的类型?从字面上看,它始终是 base 类型。
【问题讨论】:
-
逻辑上我希望尽可能避免使用模板...
-
现在不在电脑前,但是……首先,你的类不是多态的。其次,如果你使它们成为多态并使用 typeid(base) 而没有所有 decltype 的东西应该可以工作
-
@linuxfever 显然,但我试图扣除使用它的类型......如我所见,我想是不可能的......
-
大多数时候,提出您的问题表明已经做出了糟糕的设计选择,是时候备份并重新评估您之前的选择了。为什么你认为你需要这样做?
-
@JaMiT 用于通过实例覆盖另一个类的现有虚拟方法...我不想用无用的方法填充我的类...
标签: c++ type-deduction