我正在尝试将 C++ 库移植到 Rust。一个依赖项不是开源的,我只能访问头文件。rust-bindgen
并没有从这些头文件生成有效的绑定,在网上搜索了一段时间后,我得出的结论是我需要为上述库编写一个包装器。(这个库的这个头文件来自https://github.com/wpilibsuite/ni-libraries,如果重要的话)。
由于这些问题,我不能在包装器的头文件中包含原始头文件,但我可以在实际的 cpp 文件中包含原始头文件。
要使用类,我只是前向声明了它们,但其中一些标头使用 typedef 和类中的其他字段作为返回类型。似乎没有一种(好的)方法来前向声明或以其他方式使用这些。
我想知道我的方法是否正确,或者是否有更好的方法可以做到这一点,而我对此采取了错误的方式(它可能在自身内部C++
或rust-bindgen
自身内部)。
我当前设置的一个示例:
closed-source.h
class Foo {
Foo* create();
int getBar();
}
wrapper.hpp
class Foo;
Foo* foo_create();
int foo_getBar();
wrapper.cpp
#include "closed-source.h"
#include "wrapper.hpp"
Foo* foo_create() {
return Foo::create();
}
int foo_getBar(Foo* self) {
return self->getBar();
}