为虚拟函数生成包装器

时间:2019-02-28 06:02:40

标签: c++ wrapper virtual

上下文

我正在用rust编写一个程序,该程序链接到c ++库,但是rust无法生成与虚拟函数的绑定。虽然可能有更好的方法,但是最直接的解决方案是编写一个额外的抽象层,我可以生成该抽象层的绑定。

问题

我的c ++功能有些欠缺,所以我想知道是否有一个可以快速为原始函数生成包装器的库。

我有什么

  • 很多头文件,每个头文件包含一个带有create() -> ptr函数以及大约40个虚函数的类。
  • 与头对应的.so。我无权访问原始来源。

标题示例

class tPower
{
public:
   tPower(){}
   virtual ~tPower(){}

   virtual tSystemInterface* getSystemInterface() = 0;
   static tPower* create(tRioStatusCode *status);

   virtual void writeDisable(tDisable value, tRioStatusCode *status) = 0;
   virtual void writeDisable_User3V3(bool value, tRioStatusCode *status) = 0;
   virtual void writeDisable_User5V(bool value, tRioStatusCode *status) = 0;
   virtual void writeDisable_User6V(bool value, tRioStatusCode *status) = 0;
   virtual tDisable readDisable(tRioStatusCode *status) = 0;
   virtual bool readDisable_User3V3(tRioStatusCode *status) = 0;
   virtual bool readDisable_User5V(tRioStatusCode *status) = 0;
   virtual bool readDisable_User6V(tRioStatusCode *status) = 0;

   // This goes on for another 30 or so functions plus the typedef for types referenced.
   // There are no generics or any other language features used in these files.


我将如何生成这些包装,或者我可以使用哪种更有效的方法来解决此问题?



编辑:我没有用rust标记这个问题,因为已经出现了好几次了,结论几乎总是用c ++编写包装。我的问题更多地与我如何能够自动化该过程有关,因此我不必花几个小时来编写重复的代码。

0 个答案:

没有答案