我正在编写一个适配器来组合两个 API(一个在 C 中,另一个在 C++ 中)。如果在一个 API 上调用函数,我需要将调用者 ID 和函数的参数传递给适配器,并使用传递的信息调用相应的函数。
现在显然它们不能直接映射,因为一个接口需要 C++ 编译,而名称修饰会搞砸另一个,这就是为什么我首先使用一组适配器的原因。
由于参数的数量不同,我查找了可变参数函数,发现这个想法非常有用,但是我只在 POD 上运行,并且每次调用必须处理结构、枚举和许多不同的参数,这可能需要放回在将其提供给目标函数之前将其放入结构中。
我偶然发现的每个示例都简单得多,并且主要涉及算术运算,例如求和、查找最大数字或打印。主要通过 var_list 上的 for 循环完成。
也许我被这个想法卡住了,它根本行不通,但我只是好奇......
假设我想将列表中的参数分配给我的目标函数参数(传递的参数的顺序是正确的),什么是好方法?
BOOL Some_Function(
/* in */ CallerId *pObjectId,
/* in */ someDataType argument1 )
{
BOOL ret = Adapter_Call(pFunction, pObjectId, argument1);
return ret;
}
所以一旦我找到了我想做的正确的适配器
BOOL Adapter_Call(*pFunction, *pObjectId, argument1, ...)
{
va_list args;
va_start(args, argument1);
/*go over list and do `var_list[i] = pFunctionArgList[i]` which is
of whatever type so I can use it as input for my function */
va_end(args);
pObjectId.pFunction(arg1,...,argn);
}
我可以访问函数的输入参数来执行这样的赋值吗?有没有人做过这样的事情?我的想法有概念上的错误吗?
我在网上找到的只是这个, http://www.drdobbs.com/cpp/extracting-function-parameter-and-return/240000586但是由于使用了模板,我不确定它是否不会产生另一个问题所以最终为每个函数调用实现一个适配器可能会更简单。
SO 搜索只返回了这个:Dynamic function calls at runtime (va_list)