Ponder-C++反射库入门

Ponder-C++反射库入门

  • 前言
  • CMake+VS2022构建
  • Demo环境搭建


前言

Ponder:Expose C++ classes and objects so they can used as data. Serialisation and Lua scripting supported
公开C++类和对象,以便他们用作数据。且支持徐丽华和Lua脚本绑定。
github地址:https://github.com/billyquith/ponder
官方文档:https://billyquith.github.io/ponder/

概述
Ponder 是一个 C++ 库,为类型提供运行时反射。它为大多数 C++ 高级概念(如类、枚举、属性、函数和对象)提供了抽象。通过将所有这些概念包装成抽象结构,Ponder 为程序提供了额外的灵活性,并允许它们在运行时公开和操作其数据结构。


许多应用程序可以利用 Ponder 来自动执行原本需要大量工作的任务。例如,Ponder 可用于将对象的属性公开并可基于GUI编辑。它还可用于将 C++ 类自动绑定到 Python 或 Lua 等脚本语言。另一种可能的应用是将对象序列化为 XML、文本或二进制格式。或者,您甚至可以结合所有这些示例来提供强大且一致的接口,用于在 C++ 代码之外操作对象。

特征:

  • 公开 C++ 类,以便可以通过名称或类型找到它们。
  • 在运行时创建和销毁类的实例。
  • 获取和设置成员变量的属性。
  • 调用成员函数和静态函数。
  • 将类实例数据保存为 JSON 或 XML。
  • 自动生成Lua绑定。

发展历史:
Ponder是CAMP的一个分支,已被原作者退役。CAMP 依赖于 Boost,并且是 C++11 之前的版本。在 Ponder 中,Boost 依赖项已被删除,取而代之的是使用 C++11 功能。CAMP 由法国 Technogerma Systems 开发,随后由Tegesoft开发。

有关 Ponder 更改的更多详细信息,请参阅CHANGELOG.md和发行说明。

CMake+VS2022构建

构建流程

# 获取ponder源码
> git clone https://github.com/billyquith/ponder.git
> cd ponder ; mkdir build_vs2022
# 构建vs2022解决方案
> cmake -S . -B ./build_vs2022/ -G "Visual Studio 17 2022"
# 编译Debug模式的lib
> cmake --build ./build_vs2022/ --config Debug -v --clean-first
# 安装Debug模式的lib
> cmake --install ./build_vs2022/ --prefix ./dist_vs2022 --config Debug -v

Demo环境搭建

相关源码:https://gitee.com/x-shungeer/ponder-s.git

vs2022创建好项目之后,需要配置环境:
1.常规 --> C++语言标准

ISO C++17标准(/std:c++17)

2.C/C++ --> 常规 --> 附加包含目录:

@install目录/include

3.C/C++ --> 预处理器 --> 预处理器定义:

#默认使用ponder的静态库 需要添加预处理器作标识 否则编译不过
PONDER_STATIC

4.链接器 --> 常规 --> 附加库目录:

@install目录/lib

5.链接器 --> 输入--> 附加依赖项:

#debug
ponderd.lib
#release
ponder.lib

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在没有备份的情况下恢复 Mac 上丢失的数据

如果您因意外删除、错误格式化硬盘或文件损坏而丢失了重要的、感伤的文件、照片或音乐,那么这可能会令人非常痛苦。幸运的是,您有几个选择。 您的 Mac 位于数字宇宙的中心。您可能会在上面留下照片和视频形式的记忆,以及来自您不再见面的朋友…

Java使用JSch实现SSH远程执行命令

前言 有一个奇怪的需求,就是将本地的内容直接提交到远程服务器,并且需要针对文件夹进行处理。所以,这里就直接采用JSch来实现。在这里,感谢秀发浓密的程序猿的这篇博客,给了很大启发。 思路 既然是直接读取文件夹&am…

前端如何设置div可滚动,且设置滚动条颜色

在前端中,设置 div 为可滚动并通过 CSS 自定义滚动条的颜色并不是所有浏览器都直接支持的功能,因为滚动条的样式在很大程度上取决于操作系统和浏览器的默认样式。然而,你可以使用某些 CSS 属性来尝试自定义滚动条的外观,这些属性在…

C语言 | Leetcode C语言题解之第75题颜色分类

题目&#xff1a; 题解&#xff1a; void swap(int *a, int *b) {int t *a;*a *b, *b t; }void sortColors(int *nums, int numsSize) {int p0 0, p2 numsSize - 1;for (int i 0; i < p2; i) {while (i < p2 && nums[i] 2) {swap(&nums[i], &num…

Linux系统 -- 创建systemd服务单元 Python 程序在系统启动时自动启动,并持续运行。

1. 创建一个名为 model_ai.service 的文件&#xff0c;并将其放置在 /etc/systemd/system/ 目录中。 2. 命令创建和编辑文件 sudo vim /etc/systemd/system/model_ai.service 3. 在打开的编辑器中&#xff0c;添加以下内容&#xff1a; [Unit] DescriptionModel AI Python S…

【C/C++基础】Lambda 表达式

文章目录 介绍 lambda谓词lambda 表达式的形式 向 lambda 传递参数使用捕获列表值捕获引用捕获隐式捕获 指定 lambda 返回类型返回 void 类型使用尾置返回类型 介绍 lambda 我们在自定义排序中经常看到如下代码&#xff1a; sort(nums.begin(), nums.end(), [](const int&…

10 种超赞的 MyBatis 写法,同事都说好用!

MyBatis 虽说给我们的开发带来了很多的便捷&#xff0c;但有些地方写起来依旧比较的麻烦&#xff0c;比如配置XML的时候&#xff0c;但是一个好的写法&#xff0c;不仅能为我们节省不少时间、还能能降低出错的概率&#xff0c;下面就给大家分享一些优质的写法&#xff1a; 1用…

数据结构(一)初识数据结构

数据结构&#xff08;一&#xff09;初识数据结构 要点&#xff1a;解决问题的效率与数据的组织方式有关 思考&#xff1a;如何考虑数据结构 01 如何考虑数据结构 参考&#xff1a;从数据如何插入和如何取出两个角度考虑数据存储结构 在此基础上&#xff0c;考虑数据的空间…

Hive操作运算符

关系操作符 以下操作符比较操作数(operands)从而产生TRUE/FALSE值.运算符操作数描述A B所有基本类型如果表达A等于表达B,结果TRUE,否则FALSE.A ! B所有基本类型如果A不等于表达式B表达返回TRUE,否则FALSE.如果有值为NULL&#xff0c;不会返回结果A < B所有基本类型TRUE,如…

vue强制刷新组件

在Vue中强制刷新一个组件&#xff0c;通常不是一个推荐的做法&#xff0c;因为Vue的响应式系统设计就是为了自动处理依赖的更新。要强制重新渲染组件&#xff0c;以下是几种方法&#xff1a; 使用key属性&#xff1a; 最常见的方法是改变组件的key属性。当key发生变化时&#x…

QT实现Home框架的两种方式

在触摸屏开发QT界面一般都是一个Home页面&#xff0c;然后button触发进入子页面显示&#xff0c;下面介绍这个home框架实现的两种方式&#xff1a; 1.方式一&#xff1a;用stackedWidget实现 &#xff08;1&#xff09;StackedWidget控件在Qt框架中是一个用于管理多个子窗口或…

文件夹名称大小写转换:名称首字母转大写,一种高效的文件管理方法

在日常生活和工作中&#xff0c;电脑文件夹的管理对于提高工作效率和文件检索的便捷性至关重要。文件夹名称的命名规则直接影响到文件组织的有序性和查找的速度。其中&#xff0c;将文件夹名称的首字母转换为大写是一种简单而高效的管理方法&#xff0c;下面我们就来详细探讨实…

Linux提示:mount: 未知的文件系统类型“ntfs”

mount: 未知的文件系统类型“ntfs” 在Linux系统中&#xff0c;如果遇到“mount: 未知的文件系统类型‘ntfs’”的错误&#xff0c;这通常意味着您的系统没有安装支持NTFS文件系统的软件。为了挂载NTFS文件系统&#xff0c;您需要安装ntfs-3g软件包。以下是如何在不同Linux发行…

免费ChatGPT转接地址免费ChatGPT直连地址以及使用方法

依赖环境 Python3.8以上环境 安装依赖包 pip install openai 使用方法-Python #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2024-05-08 8:56 # Author : Jack # File : chat_direct""" chat_direct """ import openai from…

Golang | Leetcode Golang题解之第76题最小覆盖子串

题目&#xff1a; 题解&#xff1a; func minWindow(s string, t string) string {ori, cnt : map[byte]int{}, map[byte]int{}for i : 0; i < len(t); i {ori[t[i]]}sLen : len(s)len : math.MaxInt32ansL, ansR : -1, -1check : func() bool {for k, v : range ori {if c…

Java基础教程(15)-多线程基础

多线程是Java最基本的一种并发模型;Java语言内置了多线程支持; 进程和线程 进程和线程的关系就是:进程和线程是包含关系;一个进程可以包含一个或多个线程,但至少会有一个线程; 在计算机中,我们把一个任务称为一个进程,浏览器就是一个进程,视频播放器是另一个进程,类…

为什么 ChatGPT 不火了?

不火了是有原因的&#xff0c;下面我来从大部分人拿到 ChatGPT 之后的两大痛点开始讲起&#xff1a; 很多朋友拿到 ChatGPT 后的第一个痛点就是&#xff1a;用的不好 你经常会感觉到 ChatGPT 回答的好空&#xff0c;没有太多参考价值。 而第二个痛点则是&#xff1a;无处去用…

Vue按照顺序实现多级弹窗(附Demo)

目录 前言1. 单个弹窗2. 多级弹窗 前言 强化各个知识点&#xff0c;以实战融合&#xff0c;以下两个Demo从实战提取 1. 单个弹窗 部署按钮框以及确定的方法即可 截图如下所示&#xff1a; 以下Demo整体逻辑如下&#xff1a; 点击“生成周月计划”按钮会触发showWeekPlanDia…

uniapp日期区间选择器

uniapp日期区间选择器 在 uniapp 中创建一个简单的自定义日期范围的日期区间选择器&#xff1a; - 限制有效日期范围开始日期为 2024-01-01&#xff0c;结束日期为当日&#xff1b; - 默认日期区间为当日向前计算的7日区间&#xff1b; - 选择开始时间后&#xff0c;判断不可大…

苹果删除的短信怎么恢复?这里有4个恢复技巧

手机短信已成为我们日常沟通中不可或缺的一部分&#xff0c;其中包含了与家人、朋友的温馨对话&#xff0c;以及与工作伙伴的重要信息。然而&#xff0c;有时我们可能会因为误操作或其他原因不小心删除了重要的短信。请别担心&#xff0c;本文将为您详细介绍删除的短信怎么恢复…