编辑:这是学校的作业,我尚未确定此设计,所以请不要建议对其进行更改。
请考虑以下层次结构:
A
/ \
B E
/\
C D
我有一个指向A(A **)的指针数组,我需要创建两个方法:
对于第一个,我正在使用以下代码:
int countTypeOfBs(A** arr, int size){
int count = 0;
for (int i = 0; i < size; i++)
if (dynamic_cast<B *>(arr[i]))
count++;
return count;
}
我坚持使用第二个,我已经尝试过了:
int countBs(A** arr, int size){
int count = 0;
for (int i = 0; i < size; i++)
if (!strcmp(typeid((*A[i])).name(), "B"))
count++;
return count;
}
但是我收到一个错误消息,表示表达式必须具有恒定值..
我该如何解决?
编辑:这是一个错字,我不小心使用了A[i]
而不是arr[i]
。它解决了这个问题。
答案 0 :(得分:4)
typeid
-operator可以应用于类型或表达式,并返回对适当的std::type_info
对象的引用。可以简单地将它们与operator==
进行比较以得出相等性。
该实现将知道引用相等是否足够,或者它需要进行字符串比较,因此请不要再犹豫了。