【发布时间】:2014-04-15 17:41:11
【问题描述】:
我正在用 C++ 编写一个包装器,它调用另一个 C++ 函数。但是该函数的输出是一个可变长度数组。不幸的是,数组大小需要是编译时常量。
目前我所拥有的:
double output[5];
mycustomfunction(input1,input2,input3,output);
for(unsigned i=0;i<(sizeof(output)/sizeof(double));i++)
cout << ',' << output[i];
但在我运行该函数之前,我不知道输出的大小。我需要将输出声明设为动态。
注意:我无法调整 mycustomfunction,因为它是由 Matlab 编码器生成的机器代码。所以它必须是一个数组。
编辑: 我在这个例子中给出了 [5] 的一个测试用例,我知道输出是 5,但通常在我运行之前我不会知道。
【问题讨论】:
-
了解如何使用 std::vector
。您可能想要使用它。 -
但我不知道输出的大小会是多少,直到我运行这个永远不会工作的函数。所以现在你使用的是 5 号,如果你不知道应该是什么尺寸,为什么会这样呢?重写函数,例如将它拆分为一个给你大小的函数,然后是另一部分。要获得正确的答案,您应该提及 mycustomfunction 中到底发生了什么。我做了很多 matlab/C++ 接口,从来没有遇到过你遇到的问题,所以你的方法似乎有些不对劲。
-
你自相矛盾。如果你将
output声明为一个包含 5 个元素的数组,你就知道它的大小,而且运行时不会改变它,没办法。 mycustomfunction 的签名是什么? -
mycustomfunction(input1,input2,input3,output, size);的大小作为参考传递以设置最大输出大小并获得结果大小 -
@MaxLybbert 不,我认为问题确实是:“我有一个函数,它需要一个指针,它应该在哪里写入它的输出。指针应该指向一些足够的可用空间函数的调用,只是我不知道这是多少。”如果是这样,答案可能是:“分配应用程序中预期的最大值(例如 1M)并祈祷,或者放弃此功能并找到其他解决方案”。