如何创建 C 工厂函数?

2024-01-08

我有一个带有函数指针的结构,如下所示:

typedef int (*node_transition_func)( wint_t );

typedef struct lex_dfa_arc_t {

    node_transition_func func;
    int expected_return_val;
    struct lex_dfa_node_t * node;

} LEX_DFA_ARC_T;

现在我想创建一个返回原型“int func( wint_c );”的函数的函数例如:

node_transition_func input_equals( wint_t input, wint_t desired ) { ... }

上面的函数在C语言中是否可以实际工作?我试图避免为每个字母定义一个函数(例如 input_equals_letter_a、input_equals_letter_b、input_equals_letter_c 等)。

我的另一种方法是让 node_transition_func 接受所需字符的 wint_t 和 wchar_t* ,但我很好奇我的第一种方法是否有效。

Thanks!


您基本上可以通过返回一个包含函数指针和绑定变量的结构来模拟闭包和柯里化,而不是“返回函数”。有了几个#define,它甚至可能看起来还算正常。

OTOH,当你使用某种特定的语言时,你应该坚持它的习语。闭包不是 C 的强项。我建议您不要尝试在 C 代码中过于通用,如果有疑问,只需使用 switch(){} 即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建 C 工厂函数? 的相关文章

  • Fortran DLL 导入

    Fortran 中有一段代码罗伯特 L 帕克和菲利普 B 斯塔克 http www stat berkeley edu 7Estark Code sbvq f FORTRAN subroutine bv key m n a b bl bu
  • 将多种类型存储为 C++ 字典中的值?

    我想编写一个行为几乎等同于 Python 字典的 C 对象 C 的std map and std unordered map容纳了 Python 字典已有的一些功能 但缺乏最重要的功能之一 即能够添加任意对象和类型 即使不可能 您离实现 P
  • crt0 是否加载 msvcrt.dll?

    我想弄清楚标准 C 函数是什么样的printf 在 Windows 环境下加载到内存中 我知道crt0 obj准备堆栈 调用int main int argc char argv 然后使用 main 返回的退出代码退出进程 我还听说 C 标
  • 在 C 中读取字符时打印

    我正在尝试编写一个简单的小代码片段来响应箭头键按下 我知道 up 由 A 表示 并且我有以下代码来检查该序列 while 1 input char fgetc stdin if input char EOF input char n bre
  • Mono C# 获取应用程序路径

    我正在寻找我的应用程序的目录 它似乎与常规 c 不同 As in Path GetDirectoryName Application ExecutablePath 不管用 一种正确的跨平台解决方案是 Path GetDirectoryNam
  • 用于测试 func(args) 是否格式良好且具有所需返回类型的特征

    有许多类似的问题 答案 但我无法将这些答案完全放在一起来服务于我的目的 我想要一个特质 template
  • 尝试从 Web 应用程序访问报告服务时,Internet Explorer 导致 IIS 500 错误

    我有一个 aspx Web 表单页面 它调用托管在 SQL 2012 报告服务服务器上的 SQL 2012 SSRS 报表 并使用报表查看器在 aspx 页面上显示报表 问题是当我单击链接将参数发送到报告服务器并运行报告时 页面挂起 仅在
  • 从列表中获取数组而不进行堆分配

    我有一个列表 我想将其数组分配给一个属性 public void BuildMesh List
  • 为什么Java不支持C中的clrscr这样的函数?

    我有一个问题 对很多人来说可能听起来很愚蠢 但我不能停下来把它发布在这里 因为在互联网上找不到任何东西 为什么java没有我们在C中使用的clrscr之类的函数 如果我创建了一个基于用户输入反复迭代的 java 控制台应用程序 然后如果我想
  • 保存到会话状态的 DataTable 丢失事件处理程序

    我有一个来自强类型数据集的数据表 该数据集在 TableNewRow 事件上有一个事件处理程序 用于初始化一些日期字段 当我将此表保存到会话状态时 事件处理程序会正常触发 直到表被序列化 在后续请求中 当我从会话状态检索表时 事件处理程序不
  • 在硬件不足的情况下进行编码

    我目前正在使用 C 中的 SIMD 指令进行编码 并尝试使用 IDE 在实时编码时显示错误 拼写错误等 问题是 我使用的是 AVX512 指令 我的硬件不支持这些指令 只有我用于编译的服务器支持 有没有一种方法可以在 IDE 中进行错误检查
  • 图像的 EMGU/OpenCV FFT 未产生预期结果

    我正在尝试使用 EMGU 可视化图像的 FFT 这是我正在处理的图像 这是预期的结果 Here s what I get 这是我的代码 Image
  • 更改 ASP.NET 控件的访问修饰符

    如果我像这样将控件放入 aspx 文件中
  • 底层连接已关闭:接收时发生意外错误

    我来这里是因为我在通过 ftp 协议下载一些文件时遇到问题 这很奇怪 因为它偶尔会发生 甚至对于同一个文件也是如此 只是一个精确度 我正在下载非常大的文件 从 500 Mo 到 30Go 以下是我的函数返回的异常类型 抱歉 这是法语 Sys
  • 使用signinmanager成功登录后,用户仍然显示为已注销?

    我已将 Asp Net 身份框架添加到从前端调用的 WebAPI 中 注册帐户后 并看到它在数据库中正确显示 我使用该用户的用户名和密码登录 结果成功 但根据登录管理器 用户未登录 我尝试使用 cookie 身份验证使用此示例 https
  • 对于相同的数据库对象,实体框架对象引用是否相同

    如果我从不同位置查询 逻辑上 在数据库中 相同的对象 实体框架是否返回相同的对象引用 例如 我查询了名为 Joe Black 的客户 并假设现在我知道数据库中只有一个 Joe Black Customer c select blabla w
  • 检查SQL Server数据库表中是否存在表或列

    在 SQL Server 数据库中创建列或表之前 我想检查所需的表和 或列是否存在 我已经四处搜寻 到目前为止发现了两种方法 我不想使用存储过程 通过使用SqlCommand ExecuteScalar 方法并捕获异常来确定表 列是否存在
  • 在异步方法中显示错误消息的更好方法

    事实上我们不能使用await关键字在catch块使得在 WinRT 中显示来自异步方法的错误消息变得非常尴尬 因为MessageDialogAPI 是异步的 理想情况下我希望能够这样写 private async Task DoSometh
  • ASP.NET:通过命名空间一次注册多个控件?

    是否可以在 aspx 文件中注册用户控件的完整命名空间 而不是单独注册每个控件 我创建了一堆用户控件并将它们收集到自己的命名空间 MyWebControls 中 如下所示 隐藏代码 namespace MyWebControls publi
  • Outlook 插件:从选定的日历中获取元素

    我正在创建 Outlook 加载项 我想知道如何从选定的日历中获取元素 例如 我需要从名为 myCalendar 的日历中获取所有约会项目 现在 我可以从所有日历中获取所有约会项目 谢谢你 这些额外的日历作为主日历文件夹的子文件夹提供 所以

随机推荐

  • Firefox 中出现奇怪的 CSP 错误

    我最近添加了以下 CSP 策略https stefan sofa rockers org https stefan sofa rockers org default src self style src self https brick a
  • 如何在 Maven 中创建两个文件的一个校验和以在目录名称中使用它

    我正在使用 Maven 创建一个目录 本地 Eclipse b3 Aggregator P2 镜像 两个配置文件 A target B target 用于两次创建此目录 如果这些配置文件发生更改 则应创建新的镜像目录 我想将配置文件的校验和
  • 使本地 TFS 构建代理使用 v14 msbuild 工具

    我有几个 ASP NET vNext 应用程序 我希望我的 CI 服务器也能够构建它们 我的本地机器和 CI 服务器都运行 VS2015 RC 然后我们就有了 VS Online 和本地构建控制器 这就是提到的服务器 但是 我无法继续构建
  • Lua 要求不工作

    我正在尝试使一个 lua 文件需要另一个文件 我正在遵循本指南 http lua users org wiki ModulesTutorial http lua users org wiki ModulesTutorial 我的基本测试应该
  • 获取 USB HDD 的序列号 (Mac OS)

    我已经在 stackoverflow com 和 google 上搜索了答案 但找不到任何东西 我获得了属于外部 USB HDD disk1 的分区 disk1s1 的 bsdName 我需要找出该外部硬盘的序列号 我已经尝试过以下操作 查
  • SCSS 模块给出流程错误

    更新至Create React App 2它通过以下 import 语句支持 css 模块 import styles from myStyles module scss 然而 flow正在抱怨说 Importing from an unt
  • 在 CDI-Unit 中注入 @PersistenceContext

    这是单元测试代码 当我们运行单元测试代码 SampleServiceTest2 时 AbstractDao 中注入的 EntityManager 始终为 null 我们如何在单元测试期间注入 em 示例服务测试2 java import j
  • 不允许将顶部框架导航到数据 URL:JsPDF

    try var a var b new jsPDF p pt a3 var c document getElementById leftPieCanvas toDataURL image png b addImage c PNG 265 6
  • 使用 terraform,如何使用 Azure 的 list/count 创建具有唯一且不同名称的多个相同类型的资源?

    这是我想要实现的目标的一个基本示例 我有两个文件 main tf 和 variable tf 我想创建两个资源组 变量文件中是我希望资源组占用的名称列表 第一个资源组的名字 以后类似 所以请帮助我了解如何实现它 我正在使用 terrafor
  • Google Cloud Endpoints 的自定义身份验证(而不是 OAuth2)

    我们对 App Engine 的支持感到非常兴奋谷歌云端点 https developers google com appengine docs python endpoints 也就是说 我们尚未使用 OAuth2 通常使用用户名 密码对
  • readline() 函数在网络浏览器中不起作用

    每次我想运行我的代码时 它都显示没有输入 我使用 Xampp 在浏览器上运行它 这在浏览器 readline 中不起作用 将被跳过 回声给出一个空值 https www php net readline https www php net
  • 如何在Android中安全地存储密钥?

    我正在阅读有关存储密钥 用于加密 解密数据 的信息 似乎无法实现这一点 攻击者实现这一目标只会增加难度 真的是这样吗 到目前为止我所得到的 存储在共享首选项 私人模式 中 已 Root 的手机将能够检索它 NDK C C 本机代码 创建 s
  • Sinatra 服务器推送?

    将数据从用 Sinatra 编写的服务器推送到客户端的最佳方法是什么 与聊天室类似 但没有 Ajax 每 2500 毫秒轮询一次 我知道 Rails 中的 Juggernaut 但对 Sinatra 很好奇 谷歌搜索一下出现了Marc An
  • VB.net动态单选按钮添加事件onclick

    您好 我对这段代码有问题 我从数据库中获取 ID 和名称 然后将每一行添加到新的 RadioButton 中 但是如何使用 msgbox onclick 获取 id 代码是这样的 Imports MySql Data MySqlClient
  • Bootstrap 菜单在移动视图中默认不折叠

    我尝试使用 twitter bootstrap 3 0 实现自动折叠的垂直导航 基本功能有效 窗口大小小 顶部的菜单应该如此 但问题是 如果我使用 bootstrap 中的默认导航栏功能 它不会折叠 div class container
  • python图像识别[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想做的是一个简单应用程序的图像识别 给定图像 500 x 500 pxs 1 种颜色背景 该图像将只有 1 个 50x50 像素的几何图
  • 如何使用 appium 来自动化 Android 上的浏览​​器?

    我想使用appium在android手机上自动化浏览器 但我不知道如何设置该功能 首先 我在 Android 设备的开发者选项中启用了 USB 调试 其次 adb 运行良好 我可以看到设备 ID 第三 我从Appium for window
  • 当鼠标一段时间没有移动时,用jQuery隐藏div元素?

    我有一个广播视频网站 带有一个菜单 当鼠标一段时间 假设 10 秒 不移动时 应该隐藏该菜单 同样 随着鼠标移动 它应该会重新出现 使用 css 和 jQuery 执行此操作的最佳方法是什么 先感谢您 看看mousemove http ap
  • 隐藏直方图

    所以我想绘制正态分布 我已经看到一种方法是使用以下代码 import numpy as np import matplotlib pyplot as plt mu 5 sigma 1 s np random normal mu sigma
  • 如何创建 C 工厂函数?

    我有一个带有函数指针的结构 如下所示 typedef int node transition func wint t typedef struct lex dfa arc t node transition func func int ex