Realm C++ SDK版本 v 2.2.0

Realm C++ SDK

Realm

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

为何使用 Realm

  • 对开发人员来说直观: Realm 面向对象的数据模型易于学习,不需要 ORM,可以减少编写的代码。
  • 专为离线使用而设计: Realm 的本地数据库会在磁盘上持久保存数据,因此应用程序离线运行与在线运行一样顺畅。
  • 专为移动设备打造: Realm 功能齐全、轻量级,可高效利用内存、磁盘空间和电池寿命。
  • Device Sync :轻松地在用户、设备和后端之间保持数据实时同步。 免费开始使用创建云后端

面向对象:简化代码

Realm 专为移动开发者构建,注重简单性。 这种惯用的面向对象的Realm 数据模型可以节省数千行代码。

#include <cpprealm/sdk.hpp>
using 命名空间域;
// 像定义常规结构体一样定义模型。
struct Dog {
std::string name;
int64_t age;
};
REALM_SCHEMA(狗,名称,年龄)
struct Person {
std::string name;
int64_t age;
// 通过将对象字段指向另一个类来创建关系
Dog*dog;
};
REALM_SCHEMA(Person,_id,name,age,dog)
// 像使用常规对象一样使用它们。
autodog = 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;
// 获取具有自动模式发现功能的默认 Realm。
auto 域 = db (std::move(config));
// 通过写事务(write transaction)轻松保留数据
auto Managed_Person = Realm.write([&Realm, & Person] {
return realm.add(std::move(people));
});
// 具有类型安全性的查询。
autodogs = realm.objects<Dog>();
auto full_dogs = dogs.where([]( auto & d) {
return d.age > 2;
});
Definition: db.hpp:63
定义: managed_primary_key.hpp:72

活动对象:构建响应式应用

Realm 的对象平均值在任何地方更新的数据都会在任何地方自动更新。

// 打开默认 Realm。
auto 域 = db (std::move(config));
autodog = Dog { .name = "Max" };
// 在 Realm 中创建一只狗。
automanaged_dog = realm.write([&realm, &dog] {
return realm.add(std::move(dog));
});
// 设置监听器并观察对象通知。
token = Managed_dog.observe([]( auto && 更改){
if (change.error) {
std::cout<< "发生错误:" <<error<<std::endl;
} else if (change.is_deleted) {
std::cout<< "该对象已被删除。" <<std::endl;
} else {
std::cout << "属性 " << 属性.name << "changed to " << 属性.new_value << std::endl;
}
}
// 更新狗的名称以查看效果。
realm.write([&managed_dog] {
managed_dog.name = "Wolfie"
});
定义: notifications.hpp:38

数据同步

Atlas Device Sync可以轻松地在用户、设备和后端之间保持数据实时同步。

auto app = 域::App ( "<app-id>" );
auto user = app.login(域::App::credentials::anonymous()).get();
auto 域 = db ( user .Flexible_sync_configuration());
auto car = realm.results<Car>();
realm.write([&cars](){
for ( auto & car : Cars) {
car.accelerate();
}
});
定义: app.hpp: 226
定义: app.hpp: 92

开始体验

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

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 libcurl 4 -openssl-dev sudo apt-get install libuv 1 -dev sudo apt-get install libprocps-dev sudo apt-get install libssl-dev sudo apt -get install zlib 1 g-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 上,通过浏览器导航至以下网站,下载相应的安装程序。

  • Visual Studio 2019: https ://www.Visualstudio.com/
  • CMake: https ://cmake.org/download/

构建

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 属性
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") # 如果在发布版本中构建,请使用 `CONFIG:Release>:Release`