知道函数内参数中基指针的派生类的类型
Know type of derived class of base pointer in an argument inside a function?
我有一个类Attribute
class Attribute {};
这是某些类的基类,例如
class Place : public Attribute {};
class Time : public Attribute {};
class Way: public Attribute {};
然后我有两个initializer_lists
Place* place = new Place();
Time* time = new Time();
Way* way = new Way();
auto il1 = std::initializer_list<Attribute*>({ place, time });
auto il2 = std::initializer_list<Attribute*>({ place, way });
我的目标是了解初始值设定项列表的元素,这些元素属于第二个initializer_list
元素的类型。
一种方法是做类似的事情
bool isFirstElementAPlace = (dynamic_cast<Place*>(*(l.begin())) ? true : false);
但是Place*
应该用typeid(*(il2.begin()))
代替,但它返回的类型信息是Attribute*
,而不是Place*
左右。所以这个答案是无效的。
有没有办法在initializer_list的参数中一般知道基类指针的派生类的类型?
在这个问题中解决了
使用模板:
template <typename T>
bool isType(Attribute* a) {
return dynamic_cast<T*>(a);
}
然后你可以像这样检查类型:
bool isFirstElementAPlace = isType<Place>(*(l.begin()));
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 如何使用基类指针引用派生类成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 如果基类包含双指针成员,则派生类的构造函数
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- 指向基类派生类的 std::unique_ptr 的指针
- 当我在 C++ 中将派生类的指针分配给指针时,地址会更改
- 从基指针到派生的强制转换问题
- 派生类是从基类继承 v 指针并仅使用它,还是也有自己的 v 指针?
- 从纯虚拟类 (A) 派生的指针无法访问来自纯类 (B) 的重载方法
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- 从基类指针派生派生类的模板类型
- 指向从指针派生类成员函数的指针,指向基类成员函数
- 访问通过指针派生的类
- 如果未使用虚拟函数,则使用基类指针派生类的任何目的
- 从基指针C++派生类的类型
- 无法从指针派生类转换为指针基类(多态性)
- C++ - 传递智能指针派生类