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. Python代码将大量遥感数据的值缩放指定倍数的方法

      本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像文件的方法.   首先,看一下本文的具体需求.我们现有一 ...

  2. sql server导入表的一些函数使用

    truncate table JC_BMDA; insert into JC_BMDA(bh,mc,qdmc,pym,ty) select right('0'+rtrim(convert(varcha ...

  3. 云电脑Win7系统安装报错详解:问题与解决方案

    本文分享自天翼云开发者社区<云电脑Win7系统安装报错详解:问题与解决方案>,作者:每日知识小分享 随着云计算技术的快速发展,越来越多的人开始使用云电脑.然而,在为云电脑安装Win7系统时 ...

  4. .NET周刊【1月第2期 2025-01-12】

    国内文章 [.NET] API网关选择:YARP还是Ocelot? https://www.cnblogs.com/madtom/p/18655530 本文详细比较了YARP和Ocelot两种API网 ...

  5. 创建json文件上传下载ftp

    package org.jeecg.modules.util; import java.io.File; import java.io.FileOutputStream; import java.io ...

  6. macOS安装软件过程中常见几种报错的解决办法

    对于刚使用 macOS 或者在更新系统后尝试运行应用时遇到问题的用户,可能会看到以下几种错误提示: xxx已损坏,无法打开,你应该将它移到废纸篓 打不开 xxx,因为它来自身份不明的开发者 打不开xx ...

  7. 概率学习(Genshin中)

    目前待补充:停时定理的部分例题. 定义 首先定义样本空间 \(\Omega\),是所有样本点(结果)的集合. 随机事件 \(A\) 是样本空间的子集. 定义事件和为事件并,积为事件交. 事件域 \(\ ...

  8. Luogu P2468 SDOI2010 粟粟的书架 题解 [ 紫 ] [ 可持久化线段树 ] [ 二分 ] [ 前缀和 ]

    粟粟的书架:二合一的缝合题. 前一半测试点 此时是 \(200\times 200\) 的二维问题,首先考虑暴力怎么写,显然是每次询问把查的全扔进大根堆里,然后一直取堆顶直到满足要求或者取空. 那么这 ...

  9. 用脚本采用wget方式直接下载谷歌云盘里面的文件实操

    今天在工作中遇到了一个挑战,在这里和大家分享一下我的解决过程.突然接到一个紧急需求,需要在服务器上部署一个模型文件,而这个文件存储在谷歌云盘里.摆在面前有两个选择: 方案一:先在本地下载,然后再上传到 ...

  10. LCD显示器的接口协议

    简介LCD的接口有多种,常用的LCD的连接方式有如下几种:MCU(MPU)模式,RGB模式,SPI模式,VSYNC模式,MDDI模式,DSI模式,MIPI模式,LVDS模式,TTL模式,EDP模式. ...