【CXX】6.9 CxxVector<T> — std::vector<T>

std::vector 的 Rust 绑定称为 CxxVector。

限制:

Rust 代码永远无法通过值获取 CxxVector。相反,在 Rust 代码中,我们只能通过引用或智能指针来访问向量,例如 &CxxVector 或 UniquePtr<CxxVector>。

CxxVector 不支持 T 为不透明的 Rust 类型。对于语言边界上的不透明 Rust 类型的集合,您应该使用 Vec(C++ 中的 rust::Vec)。

示例

此程序涉及 Rust 代码将 CxxVector(即 std::vectorstd::string)转换为 Rust 的 Vec。

rust 复制代码
// src/main.rs

#![no_main] // main 在 C++ 中由 main.cc 定义

use cxx::{CxxString, CxxVector};

#[cxx::bridge]
mod ffi {
extern "Rust" {
fn f(vec: &CxxVector<CxxString>);
}
}

fn f(vec: &CxxVector<CxxString>) {
let vec: Vec<String> = vec
.iter()
.map(|s| s.to_string_lossy().into_owned())
.collect();
g(&vec);
}

fn g(vec: &[String]) {
println!("{:?}", vec);
}
cpp 复制代码
// src/main.cc

#include "example/src/main.rs.h"
#include <string>
#include <vector>

int main() {
std::vectorstd::string vec{"fearless", "concurrency"};
f(vec);
}
相关推荐
阿饼24030 分钟前
算法——图论——交通枢纽
c++·算法·动态规划·图论
its_a_win33 分钟前
洛谷 P1182 数列分段 Section II 二分详细讲解
c++·算法
爱编程的小赵1 小时前
第十五届蓝桥杯C/C++B组拔河问题详解
c语言·c++·蓝桥杯
无名之逆2 小时前
Hyperlane:Rust 生态中的轻量级高性能 HTTP 服务器库,助力现代 Web 开发
服务器·开发语言·前端·后端·http·面试·rust
ksbglllllll3 小时前
ccf3401矩阵重塑(其一)
c++·算法·矩阵
阿饼2403 小时前
算法——图论——最短路径(多边权)
c++·算法·动态规划·图论
无名之逆4 小时前
轻量级、高性能的 Rust HTTP 服务器库 —— Hyperlane
服务器·开发语言·前端·后端·http·rust
无名之逆4 小时前
探索Hyperlane:用Rust打造轻量级、高性能的Web后端框架
服务器·开发语言·前端·后端·算法·rust
威桑5 小时前
Qt 中 isHidden 和 isVisible 的区别与使用
开发语言·c++·qt