[!WARNING] 我们已于 2024 年 9 月宣布弃用 Atlas Device Sync + Realm SDKs。详情请参见:
如需使用不含同步功能的
realm-cpp版本,请安装版本 20 或查看 "community" 分支。

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=ONcmake 选项。
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 PROPERTY
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") # If building in release use `CONFIG:Release>:Release`