我继承了一个相当老的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);
};
}