c++ - 有什么方法可以将基本类型存储在变量或成员指针中?
问题描述
考虑以下代码
#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
类型。
解决方案
是的。只需取消引用指针并应用typeid
:
void parseType(A* base)
{
std::cout << typeid(*base).name() << "\n";
}
原因是如果操作数是多态类型的左值表达式typeid
,它将在运行时评估操作数。在您的原始示例中,是一个编译时操作并提取 的静态类型,所以它总是.decltype
base
A
请注意,这需要A
至少有一个虚拟成员函数,以便它符合多态类型的条件。另外,你忘了#include <typeinfo>
。
推荐阅读
- c# - 在尝试设置实例之前,Entity Framework 使用了默认 DbConfiguration 实例
- errno - 添加
到“my_header.h”会导致错误消息 - mysql - 重新抛出非 MySQL 错误 Node.js
- reactjs - 如何在每个新页面上推送 JS 事件以使用 ComponentDidUpdate Gatsby 跟踪访问
- r - 获得成对差异
- ruby-on-rails - 有谁知道全局范围 ActiveRecord 的方法?我希望及时获得整个数据库的快照
- php - 如何在 PHP 中以 JSON 对象数组的形式访问表单数据
- r - 参数是否包含在页面列表中?
- c++ - 读取多行文本文件
- python - NumPy 非矩形阵列的内部矩形阵列的元素形状不正确