是否可以实现__super宏?

时间:2011-05-18 07:10:27

标签: c++ visual-c++ gcc macros

请告诉我是否有办法手动实施Microsoft特定的 __ super 宏...

3 个答案:

答案 0 :(得分:7)

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();
  }
};

请注意,您不应忘记在每个派生类中重新定义,否则您的调用链中会出现漏洞。

一个缺点:整个构造爆炸了多个基类。 :/

答案 1 :(得分:3)

避免使用它会使您的代码无法移植。如果您想为基类命名,请使用typedef:

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

答案 2 :(得分:3)

关键字super实际上是在C ++标准化过程中提出了很长一段时间,但它被拒绝为不必要的,因为它可以使用Xeo在他的回答中描述的方法实现 - 这在Stroustrup中有所介绍D&amp; E书。我想微软认为它确实是必要的,但是如果你使用它就会被警告你的代码将无法移植。