[英]Inline inheritance of an abstract class in C++
在Java中,我们可以在这样的方法中继承接口:
public Class myClass {
void myMethod() {
myInterface listener = new myInterface() {
public onClick() {
//code goes here
}
};
setListener(listener);
}
}
在C ++中; 假设我有一个抽象类:
class myInterface {
public:
myInterface();
virtual ~myInterface() {};
virtual void onClick() = 0;
}
我尝试内联继承此抽象类,如下所示,但它给出了错误:
myClass::myMethod() {
myInterface *listener;
listener = new myInterface() {
virtual void onClick() {
//some code here
}
};
setListener(listener);
delete listener;
}
我在互联网上找到的所有示例和教程都通过子类解释继承。 但是,如何在myClass :: myMethod()中内联继承此抽象类呢?
您没有错过任何秘密关键字或编译器功能。
C ++不是Java。 C ++人们使用不同的模式,习语和语法技巧来达到相同的效果。 您需要阅读一本好书或教程才能获得它们。
您可以使用C ++方式:
#include <boost/signals2.hpp>
class notifier {
public:
void notify(int i) {
handlers(i);
}
boost::signals2::connection add_listener(std::function<void(int)> listener) {
return handlers.connect(std::move(listener));
}
void remove_listener(boost::signals2::connection &connection) {
handlers.disconnect(connection);
}
private:
boost::signals2::signal<void(int)> handlers;
};
...
notifier n;
n.add_listener([](int i) {
std::cout << i << std::endl;
});
n.notify(100);
如果您使用的是C ++ 11,则可以采用lambda:
class myLambdaListener : public myInterface{
public:
myLambdaListener(const std::function<void()>& func) : mFunction(func){}
void onClick() override {if(mFunction) mFunction();}
private:
std::function<void()> mFunction;
}
myClass::myMethod() {
myInterface *listener;
listener = new myLambdaListener([](){
//some code here
});
setListener(listener);
//delete listener; - do not delete here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.