请告诉我,如果有手动执行特定__super宏微软的方式...是否可以实现__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();
}
};
请注意,您不应该忘记在每个派生类中重新输入typedef,否则您的调用链中会出现漏洞。
一个缺点:整个结构爆炸与多个基类。 :/
避免它,它使你的代码不可移植。如果你想有一个简短的名称为您的基类,然后使用一个typedef:
class Derived: public BaseWithALongName
{
typedef BaseWithALongName super;
};
关键字super
实际上是提出了一个漫长而早在C++标准化进程,但却遭到拒绝不必要的,因为它可以可以用Xeo在他的回答中描述的方法来实现 - 这在Stroustrup的D & E书中有介绍。我想微软认为它确实是必要的,但是如果你使用它,会被警告你的代码将不能移植。
您无法仿效'__super'关键字的一个好处是它考虑了所有基类。 – Xeo 2011-05-18 07:21:32
@Xeo:这是一个让代码更麻烦一点的问题......您可以编写一个适配器模板,它将继承所有基类,并为每个基类添加一个'using X :: func;'; X'。那么大多数派生类只需要从该适配器继承。如果你把它叫做'super',那么语法:'super :: func'将会派发给直接的父对象,这将会有'using'声明并且会考虑所有的基类。还有太多的复杂性,没有多少收获。 – 2011-05-18 07:38:21
@大卫:虽然这是一个有趣的想法,谢谢你。但你是对的。您不能将这样的适配器作为简单的混合,它需要为每个层次结构进行手动编码。 :/ – Xeo 2011-05-18 07:39:53
- 1. 是否可以用宏实现类似Scala的@BeanProperty的东西?
- 2. 是否可以使用FQL实现friends.getMutualFriends?
- 3. 是否可以在Phonegap中实现Tesseract?
- 4. 是否可以实现自己的IASKSettingsReader?
- 5. 是否可以在C#中实现mixin?
- 6. 是否可以在ListView中实现ItemTemplate?
- 7. 是否可以用css实现斜边?
- 8. Can Services是否可以实现SensorEventListener
- 9. 是否可以将变量宏串化?
- 10. 是否可以插入freemarker宏?
- 11. 是否可以重写某个类型的现有Debug实现?
- 12. React VR - 是否可以通过socket.io实现实时对象?
- 13. 是否可以在Erlang中实现组件实体系统?
- 14. 是否可以在Windows中实现/运行Java实时程序?
- 15. 是否可以描述一个不可能实现的功能?
- 16. 是否可以使用TestNG实现以下设计模式?
- 17. 是否可以重写CollectionViewSource.GetDefaultView以返回ICollectionView的实现?
- 18. __COUNTER__宏是否可移植?
- 19. Ruby是否具有Metaobject协议?如果不是,是否可以实现?
- 20. 互斥体实现是否可以互换(独立于线程实现)
- 21. 是否有可能实现在C#
- 22. 是否有可能实现MySQL查询
- 23. 是否可以在可变参数宏中迭代参数?
- 24. 是否可以使用可变宏来声明多重继承?
- 25. 是否可以将以下lisp宏编写为函数?
- 26. 数据结构实现是否可以知道它是否在堆上?
- 27. 可以公开获取getter时是否可以明确实现property setter?
- 28. 可以套车!和set-cdr!被实现为宏?
- 29. Supertyping表 - 是否可以实现多重继承?
- 30. 是否可以实现我自己的对话范围?
请让我们知道__super宏的作用。 – 2011-05-18 07:12:05
其实'__super'不是一个宏,而是一个关键字 - http://msdn.microsoft.com/en-us/library/94dw1w7x(v=vs.80).aspx – sharptooth 2011-05-18 07:12:20
@Neil:http:// msdn。 microsoft.com/en-us/library/94dw1w7x.aspx – Xeo 2011-05-18 07:12:42