c ++指向数据成员和成员类型继承的指针

时间:2017-03-18 23:32:02

标签: c++ inheritance pointer-to-member

为什么不允许将指针转换为成员:

class B {
public:
    virtual void someVirtual() = 0;
};
class D1 : public B{};
class D2 : public B{};
class D3 : public B{};
//all this classes implement someVirtual

struct S {
    D1 d1;
    D2 d2;
    D3 d3;
    using SptrB = B S::*;
};

现在允许进行转换:

S s;
auto& ref = s.d1; //type D1&
B& bRef = ref; //conversion to B& is OK
bRef.someVirtual();

但是这个在语义上完全相同的不是:

auto ptr = &S::d1; //type D1 S::*
S::SptrB bPtr = ptr; //conversion error!
(s.*bPtr).someVirtual();

我想在方法foo(const S& s, S:SptrB ptr)中使用此类转换,我可以根据运行时的某些条件传递&S::d1&S::d2等。

0 个答案:

没有答案