用传递方法填充包装器类



我继承了一个相当老的c++ 98代码库,幸运的是它现在使用的是c++ 17。我在头文件interfaceHeader.h中有一个接口,如下所示:

struct PluginInterface {
void (*method1)(bool enabled);
void (*method2)(int param1, int param2);
bool (*method3)(const char *path, const int& val);
};

然后在另一个源CPP文件:


MyImplementingClass *gClass = new gClass();
void method1(bool enabled) {
gClass->method1(enabled);
}
void method2(int p1, int p2) {
gClass->method2(p1, p2);
}
bool method3(const char *path, const int& val) {
return gClass->method3(path, val);
}
void pupulateInterface(PluginInterface& iface) {
iface.method1 = method1;
iface.method1 = method2;
iface.method1 = method3;
...
}

我不能控制全局变量,也不能控制接口必须是函数指针结构体的事实。

我如何减少这里的样板文件?我尝试使用std::bind,但它没有工作:std::function不能转换为C函数指针。

void pupulateInterface2(PluginInterface& iface) {
iface.method1 = [](bool enabled){
gClass->method1(enabled);
};
iface.method2 = [](int param1, int param2){
gClass->method2(param1,param2);
};
iface.method3 = [](const char *path, const int& val){
return gClass->method3(path, val);
};

}

相关内容

  • 没有找到相关文章

最新更新