在 Java 中,如果我有一个接口,我可以这样做:
blah.setOnClickListner(new OnClickListner() {
public void clicked() { // do something }
}
我可以在 C++ 中做类似的事情吗?
在 Java 中,如果我有一个接口,我可以这样做:
blah.setOnClickListner(new OnClickListner() {
public void clicked() { // do something }
}
我可以在 C++ 中做类似的事情吗?
C++ 支持本地类。语法与任何类类型相同,除了成员函数和静态成员变量必须在类主体内定义,而不是稍后声明和定义(无法从封闭函数外部命名成员)。
从 C++11 开始,它们可以用作模板类型参数,这使得它们更加有用。
它看起来像:
void Parent::func( EventProducer* blah )
{
struct LocalListener : OnClickListener
{
virtual void clicked() { ... }
};
struct FancyLocalListener : OnClickListener
{
Parent* p;
FancyLocalListener(Parent* p) : p(p) {} // but use better variable names, please ;)
virtual void clicked() { p->func2(); }
};
blah->addOnClickListener(new LocalListener());
blah->addOnClickListener(new FancyLocalListener(this));
}
(但要注意泄漏)
不过,C++ 倾向于不为此使用接口。更好的设计是为侦听器接受一个仿函数,它在 C++11 中允许使用 lambda(编译器为您创建本地类)。