将C++代码编译为.EXE,返回双重

问题描述:

我正在使用黑箱成本函数(BBCF)的MATLAB优化平台。将C++代码编译为.EXE,返回双重

为了使用户*使用,所使用的BBCF可以是输入BBF的输入参数并且必须输出(返回)BBCF的成本值的任何可执行文件,以便MATLAB BBCF优化器找到最好的(至少成本)输入参数。考虑到一方面,我的BBCF是用C++实现的,另一方面成本价值是双倍的(实数),我需要将我的代码编译成EXE文件,输出(返回)双。但是,据我所知,当我将C++代码编译为EXE时,它“主要”编译main()函数,它的输出是main()函数的输出(即,如果运行成功,则为0! )。

一个想法可以使用返回双主函数,然后,编译例如main()中EXE但是,不幸的是,这是不可能在C++中(如在this link说明或权利的this question的第三答案成为C++的一个bug,这两者都不是这个问题的关键)。

任何人都可以提供一个想法,EXE编译形式的C++代码,输出(返回)一个双值?

+1

我希望BBCF处理代码从可执行文件的输出文件描述符中得到答案。使用类似'printf'或'std :: cout'的形式从C++应用程序写入。使用'main'的返回值来表示错误条件等。 – Rook

+0

@JLev我的问题不是如何在C++中返回非int类型以成为该问题的重复(我已经看到它)。通过提到这个问题,我解释说在main()中返回double是不可行的。 – hossayni

+0

你不能建立一个直接返回MATLAB类型的'mex'吗? –

这不是“一个在C++中的错误”(顺便说一下,这个错误可能会在一些C++编译器,而不是语言本身) - 它在该标准的描述了主()应该返回一个整数:

http://en.cppreference.com/w/cpp/language/main_function

关于如何从可执行文件返回非int,有几种方法可以做到这一点。在我看来,两个最简单的方法(就如何实现它们而言):

  1. 将其保存到文件。然后,在Matlab中监视该文件以查看更改(例如,比较时间戳)或在每次执行EXE文件后读取,具体取决于您将如何使用它。不是非常有效的解决方案,但是您的其他计算可以忽略不计的工作,并且性能损失可以忽略不计。
  2. 如果您的成本价值损失了一些数值准确性,那么您可以将双倍值乘以某个数字(此数字越大,您保留的小数位数越多)。然后围绕它,将它转换为int,让它从main()返回,在matlab中将其重新转换为double,然后除以相同的数字。用作乘数的数字应该是2的幂,这样它不会引入额外的舍入误差。如果您的成本值将值限制在[0,1]范围内,或者您可以将其归一化为这些值,并且您知道小于某个阈值的变化并不重要,则此方法可能特别有用。

在英语中,'shall'比'must'更为重要。

进行这样的更改需要更改操作系统和外壳。这种变化不太可能发生。

传递双返回的最简单方法是将其写入标准输出。或者有几种方法可用于进程间通信。