当库使用模板(泛型)时,是否可以使用Rust的C ++库?

时间:2017-04-27 14:39:57

标签: c++ templates rust ffi

当库(例如Boost)使用模板(泛型)时,是否可以使用Rust的C ++库?

1 个答案:

答案 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 conventionsno_mangle attribute

您可能需要视情况申请#[allow(non_snake_case)]

Servo使用bindgen为C和C ++代码生成Rust绑定;我不清楚C ++支持的级别,并且有点怀疑它是否可以处理模板。