当库(例如Boost)使用模板(泛型)时,是否可以使用Rust的C ++库?
答案 0 :(得分:6)
是,但可能不是实用。
D编程语言是提供某种程度的C ++互操作性的少数几种语言之一;您可以在dlang上阅读更多相关信息。
请注意模板部分的限制:
请注意,必须通过链接到包含实例化的C ++对象代码或共享库来提供D代码中使用的所有实例化。
这实际上意味着您必须使用C ++代码来使用正确的类型实例化模板,然后D编译器将链接这些实例。
您可以为Rust做同样的事情。没有编译器支持,这意味着手动修改名称。在FFI部分,您会找到link attribute:
#[link(name = "snappy")]
extern {
fn snappy_max_compressed_length(source_length: size_t) -> size_t;
}
告诉编译器哪个链接库将提供符号,您还将支持various calling conventions和no_mangle attribute。
您可能需要视情况申请#[allow(non_snake_case)]
。
Servo使用bindgen为C和C ++代码生成Rust绑定;我不清楚C ++支持的级别,并且有点怀疑它是否可以处理模板。