【问题标题】:C++ - Programmatically call correct function parameters [duplicate]C ++ - 以编程方式调用正确的函数参数[重复]
【发布时间】:2013-04-04 13:37:37
【问题描述】:

我有一个问题。假设我有这个代码:

int myfunc(int arg-a, int arg-b); 
int mywrapperfunc(obj a, obj b);

mywrapperfunc 应该包装 myfunc。 mywrapperfunc 丢弃第一个参数并采用第二个参数,它是一个数组。然后我使用数组项作为参数。但是假设我不知道 myfunc 需要多少个参数,也不知道数组类型 object(b) 中有多少项。如何以正确数量的 args 以编程方式调用 myfunc?移交的 args 数量将与数组类型对象中的项目数相同。 编辑: arg-a 和 arg-b 应该来自数组类型对象。我将对象拆分为 args。 编辑:我试图用某种意义来包装 Cython,隐藏大多数后台工作。

【问题讨论】:

  • 我什么都不懂。
  • 你能举一个你想做的例子吗?首先,arg-aarg-b 不是有效的标识符。
  • 为什么不使用std::vectorstd::array(如果可用)?他们都知道自己的大小
  • 丢弃第一个参数的目的是什么?那为什么是参数呢?
  • 对于mywrapperfunc 调用myfunc,它必须要么静态知道myfunc,要么有一个指向它的指针。无论哪种方式,它都静态地知道类型,因此知道参数的数量。如果这不是正在发生的事情,请说明这是如何设置和调用的。

标签: c++


【解决方案1】:

它叫做reflection,你不能用c++来做到这一点。为此使用其他语言,如 java 或 c#。

【讨论】:

  • 我可以使用一些 Java 包装器吗?这是一个包装器,出于某些特殊原因,必须用 C++ 编写。有什么方法可以让我用另一种语言来完成这部分工作并将其与 C++ 目标文件链接起来吗?
  • @kirbyfan64sos 如何解决作为问题的 cmets 提出的观点(特别是给出清晰的代码示例),然后希望有人可以进一步帮助您。
  • @SpongeBobFan:boost::reflection 怎么样?
  • @kirbyfan64sos,首先你应该清楚地解释你为什么需要它。也许你可以避免它?尽可能避免反射是个好主意。
  • @kirbyfan64sos,我不知道boost::reflection,但你应该看看that topic 的图片,以了解你想做什么。
猜你喜欢
  • 2014-08-06
  • 2012-07-04
  • 1970-01-01
  • 2022-01-22
  • 2011-09-03
  • 2018-01-21
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多