说我有一个监听器类。
我有A类和M类都实现了监听器类。 A级有4个M.
每个M都有1个A,但不是A,作为监听器基类。 (因此,M因为A对A一无所知而感到沮丧。)
当A收到来自其中一个M的消息时,它需要能够知道哪个M发送了它。
因此,Listener类中的每个方法都有一个Listener *参数。
所以,如果我有这样的事情:
void A::someListenerMethod(Listener* l, MsgEnum msg)
{
if(l == m_mInstance[0])
{
//will this work if the caller was indeed the M instance in question?
}
}
基本上我要问的是,在比较之前,我是否需要将M转发给听众?
我读到有时候C ++会为子类创建一个单独的对象来进行多重继承。在这种情况下没有多重继承,但我想确保它能够正常工作。
由于
答案 0 :(得分:1)
它会按预期工作。
事实上,为了进行比较,m_mInstance[0]
将隐式地强制转换为Listener*
,以便匹配类型。 if (l == (Listener*)(m_mInstance[0])) ...
将编译为相同的目标代码。除非你有多个继承,否则这通常不会产生任何开销,在这种情况下,它可能会产生最小的开销。