C++笔记-RTTR编译安装简单使用

2023-10-30 10:04

本文主要是介绍C++笔记-RTTR编译安装简单使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里以Linux为例,我使用的机器的gcc版本是4.9.2

使用的RTTR的版本是0.9.5

编译&安装

首先在官网将rttr的0.9.5版本下载下来。

Home |RTTR

按照官方的安装流程:

但这里可能会出现一个问题:

按照解答,切换成root用户,在rttr-0.9.5目录下直接cmake . 即可:

最后再进行make编译即可:

需不需要make install就看你们自己了,我没有install,后面的测试程序直接拷贝编译好的so进行处理。

使用

这里我使用了Qt的pro管理项目,qmake写起来比makefile简单点。

此处完全是参考官方给的例子:

1.手动注册:

#include <rttr/registration>
using namespace rttr;struct MyStruct { MyStruct() {}; void func(double) {}; int data; };RTTR_REGISTRATION
{registration::class_<MyStruct>("MyStruct").constructor<>().property("data", &MyStruct::data).method("func", &MyStruct::func);
}

2.遍历成员变量和成员函数:

type t = type::get<MyStruct>();
for (auto& prop : t.get_properties())std::cout << "name: " << prop.get_name() << std::endl;for (auto& meth : t.get_methods())std::cout << "name: " << meth.get_name() << std::endl;

3.构造类型:

type t = type::get_by_name("MyStruct");
variant var = t.create();    // will invoke the previously registered ctorconstructor ctor = t.get_constructor();  // 2nd way with the constructor class
var = ctor.invoke();
std::cout << var.get_type().get_name();  // prints 'MyStruct'

4.Set/Get属性:

MyStruct obj;property prop = type::get(obj).get_property("data");
prop.set_value(obj, 23);variant var_prop = prop.get_value(obj);
std::cout << var_prop.to_int(); // prints '23'

5.调用方法:

MyStruct obj;method meth = type::get(obj).get_method("func");
meth.invoke(obj, 42.0);variant var = type::get(obj).create();
meth.invoke(var, 42.0);

源码如下:

main.cpp

#include <rttr/registration>
#include <rttr/type.h>
#include <QDebug>
#include <iostream>
using namespace std;using namespace rttr;struct MyStruct{MyStruct(){};void func(double value){cout << "value: " << value << endl;};int data;
};int main(int argc, char *argv[]){qDebug() << "RTTR Demo";//manual registrationregistration::class_<MyStruct>("MyStruct").constructor<>().property("data", &MyStruct::data).method("func", &MyStruct::func);//iterate over members{type t = type::get<MyStruct>();for(auto &prop : t.get_properties())cout << "name: " << prop.get_name() << endl;for(auto &meth : t.get_methods())cout << "name: " << meth.get_name() << endl;}qDebug() << "---------------------------";//constructing type{type t = type::get_by_name("MyStruct");variant var = t.create();constructor ctor = t.get_constructor();var = ctor.invoke();cout << var.get_type().get_name() << endl;}qDebug() << "---------------------------";//Set/get properties{MyStruct obj;property prop = type::get(obj).get_property("data");prop.set_value(obj, 23);variant var_prop = prop.get_value(obj);cout << var_prop.to_int() << endl;}qDebug() << "---------------------------";//Invoke methods{MyStruct obj;method meth = type::get(obj).get_method("func");meth.invoke(obj, 42.0);variant var = type::get(obj).create();meth.invoke(var, 43.0);}return 0;
}

RTTRDemo.pro

QT += core
QT -= guiCONFIG += c++11TARGET = RTTRDemo
CONFIG += console
CONFIG -= app_bundleTEMPLATE = appSOURCES += main.cppINCLUDEPATH += /xxxx/xxxx/CFFPro/rttr-0.9.5-src/src
LIBS += -L/xxxx/xxxx/CFFPro/rttr-0.9.5-src/bin -lrttr_core

运行截图如下:

源码打包下载地址:

https://github.com/fengfanchen/Qt/tree/master/RTTRDemo

这篇关于C++笔记-RTTR编译安装简单使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/307154

相关文章

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri