AI提示词

using eca_cond = bool(*)(...);
using eca_action = void(*)(...); class eca_info
{
public:
eca_cond m_cond;
eca_action m_action;
void* m_handler_owner;
}; using eca_infos = std::vector<eca_info>; void listen(const std::string& key, eca_action action, void* handler_owner = nullptr);
void listen(const std::string& key, eca_cond cond, eca_action action, void* handler_owner = nullptr);
const eca_infos& get_infos(const std::string& key); template<typename... Args>
inline void trigger(const std::string& key, Args ...args)
{
auto infos get_infos(key);
for (auto& info : infos)
{
if (info.m_cond && !info.m_cond(...args))
{
continue;
} if (info.handler_owner)
{
// 调用对象方法
(info.handler_owner)->info.m_action()...args);
}
else
{
// 调用全局函数
info.m_action(...args);
}
}
} 补全上面的功能

修改后的ECA系统:eca.h

#pragma once

#include <cstdint>
#include <string>
#include <vector>
#include <unordered_map> // 定义条件和动作的类型
using eca_cond = bool(*)(...);
using eca_action = void(*)(...); // 事件信息结构体,包含条件、动作和事件处理者的所有者
class eca_info {
public:
eca_cond m_cond; // 条件函数
eca_action m_action; // 动作函数
void* m_handler_owner; // 事件处理者的所有者,用于对象方法调用
}; // 使用向量存储事件信息,以便管理多个事件
using eca_infos = std::vector<eca_info>; // 模拟的全局存储,用于保存不同键对应的事件信息列表
using eca_map = std::unordered_map<std::string, eca_infos>;
inline eca_map& get_eca_map()
{
static eca_map eca_map_;
return eca_map_;
} // 监听事件,注册动作
void listen(const std::string& key, eca_action action, void* handler_owner = nullptr)
{
get_eca_map()[key].push_back({nullptr, action, handler_owner});
} // 监听事件,注册条件和动作
void listen(const std::string& key, eca_cond cond, eca_action action, void* handler_owner = nullptr)
{
get_eca_map()[key].push_back({cond, action, handler_owner});
} // 获取特定事件键对应的事件信息列表
const eca_infos& get_infos(const std::string& key)
{
static const eca_infos empty; // 空列表用于未找到的情况
auto map = get_eca_map();
return map.count(key) ? map[key] : empty;
} // 触发事件
template<typename... Args>
inline void trigger(const std::string& key, Args... args) {
auto& infos = get_infos(key); // 获取对应事件的所有信息
for (auto& info : infos) {
// 如果存在条件函数且条件不满足,则跳过此动作
if (info.m_cond && !info.m_cond(args...)) {
continue;
} // 判断是否有事件处理者的所有者(对象方法调用)
if (info.m_handler_owner)
{
// 调用对象方法,假设动作函数是该对象的成员函数
// 注意:这里可能需要调整,以正确调用成员函数
(static_cast<void(*)(void*, Args...)>(info.m_action))(info.m_handler_owner, args...);
}
else
{
// 调用全局函数或静态函数
info.m_action(args...);
}
}
}

AI提示词:一个通用C++ ECS系统实现(事件条件动作系统)的更多相关文章

  1. AI绘画提示词创作指南:DALL·E 2、Midjourney和 Stable Diffusion最全大比拼 ⛵

    作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 自然语言处理实战系列:https://www.showmeai.tech ...

  2. 免费Midjourney AI绘画Prompt提示词平台合集

    Midjourney AI绘图最关键的地方在于Prompt提示词写的好,一个好的提示词可以让AI模型创造出更优质的绘图,以下是8个免费的Midjourney Prompt提示词辅助平台. ​ 编辑切换 ...

  3. Midjourney 提示词工具(10 个国内外最好最推荐的)

    Midjourney,是一个革命性的基于人工智能的艺术生成器,可以从被称为提示的简单文本描述中生成令人惊叹的图像.Midjourney已经迅速成为艺术家.设计师和营销人员的首选工具(包括像我这样根本不 ...

  4. SublimeCodeIntel 所有代码提示和补全插件 All Autocomplete 插件搜索所有打开的文件来寻找匹配的提示词

    SublimeCodeIntelSublimeCodeIntel 作为一个代码提示和补全插件,支持 JavaScript.Mason.XBL.XUL.RHTML.SCSS.Python.HTML.Ru ...

  5. Semantic Kernel 入门系列:🥑突破提示词的限制

    无尽的上下文 LLM的语言理解和掌握能力在知识内容的解读和总结方面提供了强大的能力. 但是由于训练数据本身来自于公共领域,也就注定了无法在一些小众或者私有的领域能够足够的好的应答. 因此如何给LLM ...

  6. Linux C编程学习之开发工具3---多文件项目管理、Makefile、一个通用的Makefile

    GNU Make简介 大型项目的开发过程中,往往会划分出若干个功能模块,这样可以保证软件的易维护性. 作为项目的组成部分,各个模块不可避免的存在各种联系,如果其中某个模块发生改动,那么其他的模块需要相 ...

  7. 利用RBAC模型实现一个通用的权限管理系统

    本文主要描述一个通用的权限系统实现思路与过程.也是对此次制作权限管理模块的总结. 制作此系统的初衷是为了让这个权限系统得以“通用”.就是生产一个web系统通过调用这个权限系统(生成的dll文件), 就 ...

  8. 如何实现一个通用的IHttpHandler 万能的IHttpHandler HttpWebRequest文件上传

    昨天遇到一个比较奇怪的需求,大致是需要在服务器上部署一个http服务,但是服务的具体功能不知道,以后在客服端实现.这里介绍一下系统背景,有一个系统运(部署在美国)行了很多年了,给系统产生了很多文件,现 ...

  9. 关于“找不到附属汇编 Microsoft.VC90.CRT,上一个错误是 参照的汇编没有安装在系统上。”的解决

    关于“找不到附属汇编 Microsoft.VC90.CRT,上一个错误是 参照的汇编没有安装在系统上.”的解决 一个项目需要在Win系统用计划任务执行PHP,写了个批处理bat利用php-cgi.ex ...

  10. 用DapperExtensions和反射来实现一个通用搜索

    前言 搜索功能是一个很常用的功能,当然这个搜索不是指全文检索,是指网站的后台管理系统或ERP系统列表的搜索功能.常见做法一般就是在搜索栏上加上几个常用字段来搜索.代码可能一般这样实现 StringBu ...

随机推荐

  1. Cockpit pg walkthrough Intermediate

    nmap 发现两个 web站 80 和 9090 还有 22端口 dirsearch 发现80端口有login.php 登录界面 发现没有弱口令 测试sql注入 测试了一会发现密码 password= ...

  2. 容器、容器云和容器化PaaS平台之间到底是什么关系?

    本文分享自天翼云开发者社区<容器.容器云和容器化PaaS平台之间到底是什么关系?>,作者:s****n 一直都有很多人迷惑于容器应该属于 IaaS 或是 PaaS 层,也搞不清楚容器云到底 ...

  3. Numa初识

    本文分享自天翼云开发者社区<Numa初识>,作者:j****n Numa产生 在二十世纪九十年代被开发出来的. 首次商业化实现基于NUMA的Unix系统的是对称多处理XPS-100系列服务 ...

  4. kvm实验环境的准备

    在虚拟机上最小化安装centos7,看一下我的版本 [root@kvm1 yum.repos.d]# cat /etc/redhat-release CentOS Linux release 7.9. ...

  5. Docker容器访问挂载文件权限问题

    问题描述 在使用docker-compose部署项目时,yaml文件如下: version: '3' services: purchasing-contract-consumer: image: my ...

  6. pagehelper分页查询的一个坑,明明下一页没有数据了却还是返回了数据

    pagehelper分页查询的一个坑,明明下一页没有数据了却还是返回了数据 解决:关闭这该死的合理化,如下配置: pagehelper:# helperDialect: mysql reasonabl ...

  7. 【论文随笔】基于会话的推荐系统构建方法调查(Survey On Methods For Building Session-Based Recommender Systems)

    前言 今天读的论文为一篇于2023年发表在国际开放信息技术杂志(International Journal of Open Information Technologies)的论文,文章是关于构建基于 ...

  8. 【ABAQUS 二次开发笔记】读入TXT分析结果&输出csv文件

    abaqus分析之后,很多结果可以输出dat,msg,sta等文件中.可以用记事本.notpad++.editplus等软件打开编辑. 但是往往无法直接用excel.origin等软件打开,比如对结构 ...

  9. nuxt,从开发到线上部署

    起因: 前段时间,同组小伙伴使用vue做了一个小后台,使一位后端沉寂多年得求道之心又躁动了起来...然后,当我和这个躁动起来得后端要合作重构一个网站得时候,后端小哥哥说,就知道套页面,套页面,不用新技 ...

  10. 记录一下 简单udp和sni 代理 done

    由于之前借鉴 Kestrel 了非常多抽象和优化实现,对于后续的扩展非常便利, 实现 简单udp和sni 代理 两个功能比预期快了超多(当然也有偷懒因素) (PS 大家有空的话,能否在 GitHub ...