当前位置: 首页 > news >正文

【CXX】6.1 String — rust::String

Rust::String 公共 API
// rust/cxx.h

class String final {
public:
  String() noexcept;
  String(const String &) noexcept;
  String(String &&) noexcept;
  ~String() noexcept;

  // 如果输入不是 UTF-8,抛出 std::invalid_argument 异常。
  String(const std::string &);
  String(const char *);
  String(const char *, size_t);
  String(const char8_t *);
  String(const char8_t *, size_t);

  // 用替换字符 (U+FFFD) 替换无效的 UTF-8 数据。
  static String lossy(const std::string &) noexcept;
  static String lossy(const char *) noexcept;
  static String lossy(const char *, size_t) noexcept;

  // 如果输入不是 UTF-16,抛出 std::invalid_argument 异常。
  String(const char16_t *);
  String(const char16_t *, size_t);

  // 用替换字符 (U+FFFD) 替换无效的 UTF-16 数据。
  static String lossy(const char16_t *) noexcept;
  static String lossy(const char16_t *, size_t) noexcept;

  String &operator=(const String &) & noexcept;
  String &operator=(String &&) & 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;

  const char *c_str() noexcept;

  size_t capacity() const noexcept;
  void reserve(size_t new_cap) noexcept;

  using iterator = char *;
  iterator begin() noexcept;
  iterator end() noexcept;

  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 String &) const noexcept;
  bool operator!=(const String &) const noexcept;
  bool operator<(const String &) const noexcept;
  bool operator<=(const String &) const noexcept;
  bool operator>(const String &) const noexcept;
  bool operator>=(const String &) const noexcept;

  void swap(String &) noexcept;
};

std::ostream &operator<<(std::ostream &, const String &);

限制

无。字符串可以作为函数参数和返回值,按值或按引用传递,也可以作为共享结构体的字段。

示例

// src/main.rs

#[cxx::bridge]
mod ffi {
    struct ConcatRequest {
        fst: String,
        snd: String,
    }

    unsafe extern "C++" {
        include!("example/include/concat.h");
        fn concat(r: ConcatRequest) -> String;
    }
}

fn main() {
    let concatenated = ffi::concat(ffi::ConcatRequest {
        fst: "fearless".to_owned(),
        snd: "concurrency".to_owned(),
    });
    println!("concatenated: {:?}", concatenated);
}
// include/concat.h

#pragma once
#include "example/src/main.rs.h"
#include "rust/cxx.h"

rust::String concat(ConcatRequest r);

// src/concat.cc

#include "example/include/concat.h"

rust::String concat(ConcatRequest r) {
  // rust::String 的完整运算符重载尚未添加,
  // 但我们可以这样实现:
  return std::string(r.fst) + std::string(r.snd);
}

相关文章:

  • 鸿蒙app 开发 高效的 存储 数据 推荐使用 @tencent/mmkv(V2.1.0):
  • JavaScript语言的区块链隐私
  • 【经验分享】SpringBoot集成Websocket开发 之 使用由 Jakarta EE 规范提供的 API开发
  • READ-COMMITTED事务隔离级别下的先插后查问题记录
  • 谷歌Gemini 2.0 Flash放出原生多模态图像生成功能:支持多轮对话式实时编辑,附最新尝鲜方式
  • 【算法】DFS、BFS、拓扑排序
  • Unity引擎架构介绍及代码示例
  • 网络安全设备系统集成方案 系统集成和网络安全
  • petalinux环境下给linux-xlnx源码打补丁
  • 重学vue3:vue3组件通信的几种方法
  • OpenAI新工具助力开发者:AI智能体自动任务创建的艺术
  • 基于DeepSeek的智能数据分析和自动化处理系统:引领BI行业新变革
  • redis的持久化
  • 详解 C++ 左值和右值对象 左值引用和右值引用
  • RabbitMQ报错:Shutdown Signal channel error; protocol method
  • 微信小程序-实现锚点跳转,页面加载后自动跳转、点击跳转到指定位置
  • ubuntu 设置允许root远程登录
  • c语言笔记 静态函数和递归函数
  • 基于PyTorch通信算子的分布式训练阻塞定位方法
  • emacs使用mongosh的方便工具发布
  • 网页设计图片轮播效果/关键词排名seo优化
  • 网站建设发信息/如何成为百度广告代理商
  • 运河网站制作/推广广告赚钱软件
  • 建设网站需要会什么/鱼头seo软件
  • 网站建设标签/免费b2b网站推广渠道
  • 游戏logo设计网站/百度客服在线咨询