gpt4 book ai didi

C - 向开发人员公开一个接口(interface),该接口(interface)声明了一些方法。稍后调用实现(由开发人员定义)来运行系统

转载 作者:太空宇宙 更新时间:2023-11-04 08:41:57 25 4
gpt4 key购买 nike

我正在尝试用 C 做一些有趣的事情(自动化)。我想做的是。

  1. 向外部世界(开发人员)公开接口(interface)。
  2. 该接口(interface)声明了一些基于参数的函数。
  3. 将邀请开发人员实现这些功能。
  4. 后台系统会计算一些参数。
  5. 然后它将通过传递参数(类似于回调)调用这些实现。`

应该没什么大不了的。但是在经历了这么多次“think-try”循环之后,我没有获得任何成功。每次我都越来越困惑。

我无法编写实现该功能的代码。这是一些示例代码。

假设我创建了以下界面。

MyInterface.h

int doSomething(int x, int y);
int doSomethingElseNow(int x, int y);

并要求开发人员包含头文件并为上述指定功能实现他自己的定义。(类似于 Java 中的“接口(interface)”)。假设他做了这样的事情(可能是错的)

Developer1.c

#include<"MyInterface.h">

int doSomething(int x, int y)
{
return x*y;
}
int doSomethingElseNow(int x, int y)
{
return x+y;
}

现在,我的问题是如何从其他类中调用这些函数(已定义)。我的后端代码应该是什么。此代码必须通用。它将在要求开发人员定义功能之前编写。想做类似的事情。(肯定是错误的)

Backend.c

#include<"MyInterface.h">

int main()
{
int x, y;
// calculating values of x and y

//calling doSomething
int result = doSomething(x, y);

// doing some calculations on result variable

//calling doSomethingElseNow
int result2 = doSomethingElseNow(x, result);

//do something with result2...
}

请告诉我一些继续前进的方向。

最佳答案

您绝对可以通过仅声明然后不实现您的回调函数来做到这一点,因为这将迫使开发人员实现它们(如果他不这样做,他会得到一个链接器错误)。这就是e。 G。 SDL 库在重新#define main() 函数时执行(呃!)

但是,这不是一个太明智的解决方案。 (“你可以”并不意味着“你应该”。)原因如下:

  • 在某些系统上,您将无法从代码中创建动态库,因为链接会因 undefined symbol 而失败。
  • 每个可执行文件只能实现一个回调函数。有时这还不够。
  • 开发人员不能随心所欲地调用他的回调函数。这甚至可能会引起名称冲突。
  • 它丑陋且概念落后。

因此,与其强制执行一些任意命名的函数,不如让您的接口(interface)期望一个指向回调函数的显式指针。这比您当前的方法更加灵活和优雅。

关于C - 向开发人员公开一个接口(interface),该接口(interface)声明了一些方法。稍后调用实现(由开发人员定义)来运行系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23205247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com