ITADN
realm/realm-cpp
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

[!WARNING] 我们已于 2024 年 9 月宣布弃用 Atlas Device Sync + Realm SDKs。详情请参见:

如需使用不含同步功能的 realm-cpp 版本,请安装版本 20 或查看 "community" 分支。

Realm

Realm 是一款直接运行在手机、平板电脑或可穿戴设备中的移动数据库。 本仓库包含 C++ SDK 预览版的源代码。

为什么使用 Realm

  • 对开发者直观易用: Realm 的面向对象数据模型易于学习,无需 ORM,并且能让您编写更少的代码。
  • 专为离线使用设计: Realm 的本地数据库将数据持久化到磁盘,因此应用离线时的表现与在线时一样好。
  • 为移动设备打造: Realm 功能齐全、轻量级,并高效地使用内存、磁盘空间和电池电量。
  • 设备同步:让实时跨用户、设备和后端保持数据同步变得简单。免费开始使用创建云后端

面向对象:简化您的代码

Realm 专为移动开发者打造,以简洁为核心。其惯用的面向对象数据模型可以为您节省数千行代码。

#include <cpprealm/sdk.hpp>

using namespace realm;

// Define your models like regular structs.
struct Dog {
    std::string name;
    int64_t age;
};

REALM_SCHEMA(Dog, name, age)

struct Person {
    primary_key<std::string> _id;
    std::string name;
    int64_t age;
    // Create relationships by pointing an Object field to another Class
    Dog* dog;
};

REALM_SCHEMA(Person, _id, name, age, dog)

// Use them like regular objects.
auto dog = Dog { .name = "Rex", .age = 1 };
std::cout << "name of dog: " << dog.name << std::endl;
auto person = Person();
person._id = "something unique";
person.name = "John";
person.dog = &dog;

// Get the default Realm with automatic schema discovery.
realm::db_config config;
auto realm = db(std::move(config));
// Persist your data easily with a write transaction
auto managed_person = realm.write([&realm, &person] {
    return realm.add(std::move(person));
});

// Query with type safety.
auto dogs = realm.objects<Dog>();
auto adult_dogs = dogs.where([](auto& d) {
    return d.age > 2;
});

实时对象:构建响应式应用

Realm 的实时对象意味着在任何地方更新的数据都会自动在所有地方更新。

// Open the default realm.
realm::db_config config;
auto realm = db(std::move(config));

realm::notification_token token;

auto dog = Dog { .name = "Max" };

// Create a dog in the realm.
auto managed_dog = realm.write([&realm, &dog] {
    return realm.add(std::move(dog));
});

//  Set up the listener & observe object notifications.
token = managed_dog.observe([](auto&& change) {
    if (change.error) {
        std::cout<<"An error occurred: "<<error<<std::endl;
    } else if (change.is_deleted) {
        std::cout<<"The object was deleted."<<std::endl;
    } else {
        std::cout << "Property " << property.name << " changed to " << property.new_value << std::endl;
    }
}

// Update the dog's name to see the effect.
realm.write([&managed_dog] {
    managed_dog.name = "Wolfie"
});

数据同步

Atlas 设备同步 让实时跨用户、设备和后端保持数据同步变得简单。

auto app = realm::App("<app-id>");
auto user = app.login(realm::App::credentials::anonymous()).get();
auto realm = db(user.flexible_sync_configuration());

auto cars = realm.results<Car>();
realm.write([&cars](){
    for (auto& car : cars) {
        car.accelerate();
    }
});

入门指南

请参阅我们文档中的详细说明。

API 参考位于此处

安装 Realm

先决条件

要构建 Realm C++ SDK,您需要 CMake 3.20 或更高版本以及一套标准的构建工具。 这包括 C/C++ 编译器以及像 GNU make 这样的构建系统。Realm 已在 GCC 和 Clang 上进行了全面测试。 它兼容 GCC 8.3 及更高版本,以及 Clang 9 及更高版本。您的编译器必须支持 C++17。

Ubuntu 18.04 或更高版本

sudo apt-get install build-essential
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libuv1-dev
sudo apt-get install libprocps-dev
sudo apt-get install libssl-dev
sudo apt-get install zlib1g-dev
sudo apt-get install cmake
  • 如果您使用的是 GCC 版本 <= 9 并遇到 SSL 链接错误,请添加 -DREALM_USE_SYSTEM_OPENSSL=ON cmake 选项。

macOS

在 macOS 上,默认使用 Clang 作为 C/C++ 编译器。Clang 是 作为 Xcode 的一部分安装的。需要 Xcode 13.1 或更高版本,可以通过 Mac App Store 安装。

使用名为 brew 的包管理器可以方便地设置开发环境。请参阅 https://brew.sh 获取安装说明。

brew install cmake

Windows

在 Windows 上,请在浏览器中访问以下网站 以下载相应的安装程序。

构建

git submodule update --init --recursive
mkdir build.debug
cd build.debug
cmake -D CMAKE_BUILD_TYPE=debug ..
sudo cmake --build . --target install

然后你可以使用 -lcpprealm 链接到你的库。

注意: 如果你的目标是 Windows,请确保像这样将 MSVC_RUNTIME_LIBRARY 属性添加到你的目标中:

set_property(TARGET My_Target PROPERTY
      MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") # If building in release use `CONFIG:Release>:Release`