是否可以实现__super宏

Is it possible to implement the __super macro?

本文关键字:super 实现 是否      更新时间:2023-10-16

请告诉我是否有办法手动实现Microsoft特定的__super宏...

class Base{
public:
  void func(){
    // something
  }
};
class Derived : public Base{
public:
  void func(){
    Base::func(); // just use the base class name
  }
};

虽然我认为这不是您想要的,并且您希望每个类都有一个通用访问权限?我不知道直接的解决方案,但您可以随时typedef直接基类:

class Derived : public Base{
  typedef Base super; // typedef accordingly in every class
public:
  void func(){
    super::func();
  }
};

或者如果你真的想要的话,甚至可以为typedef提供一个中间类。

template<class Base>
struct AddSuper : public Base {
protected:
  typedef Base super;
};
class Derived : public AddSuper<Base> {
public:
  void func(){
    super::func();
  }
};

请注意,您不应该忘记在每个派生类中重新键入def,否则您将在调用链中出现漏洞。

一个缺点:整个结构被多个基类炸毁。

避免它,它会使你的代码无法移植。如果要为基类使用短名称,请使用 typedef:

class Derived: public BaseWithALongName
{
   typedef BaseWithALongName super;
};
一个

关键字super实际上早在C++标准化过程中就被提出来了,但它被当作不必要的而被拒绝,因为它可以使用Xeo在他的回答中描述的方法来实现 - 这在Stroustrup的D&E书中有所介绍。我想Microsoft决定它确实是必要的,但请注意,如果您使用它,您的代码将不可移植。