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. 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!

    写在前面 最近,DeepSeek 发布的推理大模型 DeepSeek - R1 ,可以说是AI大模型领域杀出的一匹黑马.它在国外大模型排名 Arena 上成绩惊人,基准测试位列全类别大模型第三,在风格 ...

  2. 再获权威认可!天翼云论文被IEEE/ACM CCGrid收录

    近日,由天翼云弹性网络开拓者团队撰写的<Towards Better QoS and Lower Costs of P4 EIP Gateway at the Edge>论文被The 24 ...

  3. Q:如何实现notepad++列编辑模式

    列编辑: txt编辑器大家都非常熟悉,当需要修改多行的时候只能一行一行的修改.而notepad 可以同时修改多行的数据. 1.鼠标移动光标到要选择的列 2.按住 alt 键,从上到下选择多列,光标会变 ...

  4. SMMS图床Java接口上传

    前言 个人项目开发中,网站建设中需要用到大量的图片以及用户上传的图片,如果服务器带宽小,磁盘容量小将所有的图片信息全部存储在服务器上不太现实,这里建议将图片数据存储在对象存OSS上或者将图片保存在图床 ...

  5. 【COM3D2Mod 制作教程(5)】实战!制作身体部分(中)

    [COM3D2Mod 制作教程(5)]实战!制作身体部分(中) 帽子是很典型的装扮类型,较为简单适合入门,所以我们先制作帽子 Mod,流程基本和第二章中的概述相符.因为导入插件及其功能位置也都已在第二 ...

  6. N-gram基本原理

    N-gram模型是一种语言模型(Language Model,LM),语言模型是一个基于概率的判别模型,它的输入是一句话(单词的顺序序列),输出是这句话的概率,即这些单词的联合概率(joint pro ...

  7. 小米13Pro一键ROOT秒杀全版本

    小米13p专属 通杀全版本 但是必须解开bl锁 小米13pro一键root使用方法: 解锁bl后,不要设置锁屏密码,有的话就取消掉,打开软件,点击安装驱动(管理员) 手机上打开usb调试和usb安装 ...

  8. Pm2安装以及守护傻妞机器人进程教程

    本教程以centos7为例子,其他系统可自行替换 一.安装 1.安装nodejs yum install nodejs 2.安装pm2 cd /root && npm install ...

  9. maven - [01] 概述

    Maven -- 项目管理及自动构建工具 001 || maven是什么   Maven 是一个由Apache软件基金会提供的项目管理及自动构建工具,主要用于Java编程.它基于项目对象模型(POM) ...

  10. Azkaban的job从创建到执行

    单一 job Step1: 创建 job 描述文件 xxx.job: job 的描述文件 type =  command command =  echo 'hello, this is my firs ...