【CXX】6.2 str — rust::Str

server/2025/3/13 17:01:50/
Rust::Str 公共 API
// rust/cxx.hclass Str final {
public:Str() noexcept;Str(const Str &) noexcept;Str(const String &) noexcept;// 如果输入不是 UTF-8,抛出 std::invalid_argument 异常。Str(const std::string &);Str(const char *);Str(const char *, size_t);Str &operator=(const Str &) & noexcept;explicit operator std::string() const;// 注意:没有空终止符。const char *data() const noexcept;size_t size() const noexcept;size_t length() const noexcept;bool empty() const noexcept;using iterator = const char *;using const_iterator = const char *;const_iterator begin() const noexcept;const_iterator end() const noexcept;const_iterator cbegin() const noexcept;const_iterator cend() const noexcept;bool operator==(const Str &) const noexcept;bool operator!=(const Str &) const noexcept;bool operator<(const Str &) const noexcept;bool operator<=(const Str &) const noexcept;bool operator>(const Str &) const noexcept;bool operator>=(const Str &) const noexcept;void swap(Str &) noexcept;
};std::ostream &operator<<(std::ostream &, const Str &);

注意事项

请注意,rust::Str 的行为类似于 &str,即它是一个借用!C++ 需要特别注意其生命周期。

再次强调:&str 对应的是 rust::Str。不要尝试将 &str 写成 const rust::Str &。C++ 语言级别的引用无法捕获 &str 的“胖指针”特性。

限制

允许作为函数参数或返回值。目前不支持在共享结构体中使用。&mut str 目前也不支持,但由于其使用场景极为罕见,因此影响不大。

示例

rust">// src/main.rs#[cxx::bridge]
mod ffi {extern "Rust" {fn r(greeting: &str);}unsafe extern "C++" {include!("example/include/greeting.h");fn c(greeting: &str);}
}fn r(greeting: &str) {println!("{}", greeting);
}fn main() {ffi::c("hello from Rust");
}
// include/greeting.h#pragma once
#include "example/src/main.rs.h"
#include "rust/cxx.h"void c(rust::Str greeting);// src/greeting.cc#include "example/include/greeting.h"
#include <iostream>void c(rust::Str greeting) {std::cout << greeting << std::endl;r("hello from C++");
}

http://www.ppmy.cn/server/174674.html

相关文章

线性表相关代码(顺序表+单链表)

线性表相关代码 线性表相关代码&#xff08;算法命题重点&#xff09;顺序存储链式存储单链表带头结点不带头结点 双链表循环链表静态链表 线性表相关代码&#xff08;算法命题重点&#xff09; 线性表作为一种基础且重要的数据结构&#xff0c;在算法领域中占据着关键地位&am…

go sync.Once 源码分析

sync.Once 是 Go 语言标准库中的一个同步原语&#xff0c;用于确保某个操作或函数在并发环境下只执行一次。它通常用于以下场景&#xff1a; 单例模式&#xff1a;确保全局只有一个实例对象&#xff0c;避免重复创建资源延迟初始化&#xff1a;在程序运行过程中&#xff0c;当…

无需 Docker 也能下载镜像!轻松获取 Docker 镜像文件!

背景问题 在日常开发或运维工作中&#xff0c;我们经常需要下载 Docker 镜像&#xff0c;但可能会遇到以下问题&#xff1a; &#x1f539; 服务器无法访问 Docker Hub&#xff0c;导致 docker pull 失败。 &#x1f539; Windows 端没有安装 Docker&#xff0c;但仍然需要获…

Pygame实现射击鸭子游戏3-1

基于pygame的打鸭子游戏如图1所示。 图1 打鸭子游戏 从图1中可以看出&#xff0c;玩家通过鼠标控制瞄准镜的移动&#xff0c;点击鼠标左键射击鸭子。而鸭子则从屏幕左边向右边游动&#xff0c;当游到屏幕右侧边界后&#xff0c;重新回到屏幕左侧继续游动。 游戏需要创建两个类…

STM32外部中断

GPIO->AFIO->EXTI->NVIC 进入NVIC是中断 不进入NVIC是事件 AFIO复用重映射 IP[59]~IP[0]分别对应中断 59~0。而每个可屏蔽中断占用的 8bit 并没有 全部使用&#xff0c;而是只用了高 4 位。这 4 位&#xff0c;又分为抢占优先级和子优先级。抢占优先级在前&#xf…

【C++】滑动窗口算法

繁花落尽&#xff0c;我心中仍有花落的声音。一朵&#xff0c;一朵&#xff0c;在无人的山间轻轻飘落。 前言 这是我自己学习蓝桥杯算法的第二篇博客总结。 上一期笔记是关于C的双指针算法&#xff0c;没看的同学可以过去看看&#xff1a; 【C】双指针算法-CSDN博客https://bl…

iOS侧滑返回手势冲突处理

遇到这样一个场景&#xff0c;本身页面vc.view添加了全屏侧滑返回手势&#xff0c; 但是页面中顶部有一个横向滚动的collectionView&#xff0c; 这个时候&#xff0c;我们 如果在页面总滑动横向滚动的collectionView的时候&#xff0c;就会执行横向collectionView的滚动&#…

分布式存储学习——HBase表结构设计

目录 1.4.1 模式创建 1.4.2 Rowkey设计 1.4.3 列族定义 1.4.3.1 可配置的数据块大小 1.4.3.2 数据块缓存 1.4.3.3 布隆过滤器 1.4.3.4 数据压缩 1.4.3.5 单元时间版本 1.4.3.6 生存时间 1.4.4 模式设计实例 1.4.4.1 实例1&#xff1a;动物分类 1.4.4.2 …