Coc*_*ico 5 c++ qt subclassing
我想覆盖QWidget的虚函数而不进行子类化.它可以在java中.我找到了这个链接:
不确定c ++中是否还有一种方法.有任何想法吗?
eer*_*ika 11
没有继承就无法覆盖.链接示例中的代码确实是子类.也许混淆来自它不使用extends关键字的事实.它创建一个匿名子类XStream并覆盖它的方法.这些类也存在于C++中,类似的代码也是可能的.命名约定有点不同.没有名称但有命名实例的类称为未命名 †.这是我对代码的音译,以展示如何使用C++中的未命名类来完成示例:
class SomeClass {
public:
void myMethod() {
class: public XStream {
protected:
MapperWrapper wrapMapper(const MapperWrapper& next) override {
return MapperWrapper(next); // the example is cut off here, persumably it's creating another nested anonymous class, but i'll keep this simple
}
} xstream;
}
};
Run Code Online (Sandbox Code Playgroud)
如果要以这种方式覆盖它,可以将XStreamwith QWidget和wrapMapper其中一个虚拟类替换.
匿名类通常用于Java中的回调.但是在C++中我们有函数指针和最近的lambdas,这可能就是为什么在C++代码中使用未命名的类与Java相比更为罕见.此外,在c ++ 11之前不允许将未命名的类作为模板参数,因此它们对于回调函数来说是一个糟糕的选择.
†在c ++中,Anonymous类(或struct)也可以是没有命名实例的类.它可以是另一个外部类的成员,并且匿名类的成员将被带到父类的命名空间.除此之外,标准不允许匿名类.那么这个东西怎么定义呢?嗯,匿名工会是允许的,匿名课程与他们类似.但是,C11标准允许使用匿名结构.
| 归档时间: |
|
| 查看次数: |
1630 次 |
| 最近记录: |