Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用#Include将从终端读取的文件包含到函数中 我编写了一个代码,它以C++兼容格式的文本文件读取数学函数,并对其应用数学运算。这是代码的简要摘要。我知道#include是一个预处理器指令,因此每次读取文件内容后,它都会通过bash脚本编译代码 double myfunc(long double x){ return #include "/.../filename" } int main{ "Maths stuff happens here" }_C++_Command Line - Fatal编程技术网

使用#Include将从终端读取的文件包含到函数中 我编写了一个代码,它以C++兼容格式的文本文件读取数学函数,并对其应用数学运算。这是代码的简要摘要。我知道#include是一个预处理器指令,因此每次读取文件内容后,它都会通过bash脚本编译代码 double myfunc(long double x){ return #include "/.../filename" } int main{ "Maths stuff happens here" }

使用#Include将从终端读取的文件包含到函数中 我编写了一个代码,它以C++兼容格式的文本文件读取数学函数,并对其应用数学运算。这是代码的简要摘要。我知道#include是一个预处理器指令,因此每次读取文件内容后,它都会通过bash脚本编译代码 double myfunc(long double x){ return #include "/.../filename" } int main{ "Maths stuff happens here" },c++,command-line,C++,Command Line,这可以按预期工作,但我希望能够加快进程并从终端读取文件名,而不是每次都将其输入脚本。为此,我尝试使用以下方法: int g_argc; char **g_argv; void process_command_() { filename=argv[1] } double myfunc(long double x){ return #include filename } int main{ "Maths stuff happens here" } 这种想法有些牵强,但

这可以按预期工作,但我希望能够加快进程并从终端读取文件名,而不是每次都将其输入脚本。为此,我尝试使用以下方法:

int g_argc;
char **g_argv;

void process_command_()
{
   filename=argv[1]
}

double myfunc(long double x){
   return
   #include filename
}

int main{
   "Maths stuff happens here"
}
这种想法有些牵强,但我不确定如何将文件名从终端读入我的函数,就像我自己键入的一样,因为函数在int main()之外。我环顾了StackExchange,发现了类似的问题,但没有一个解决方案适用于我的案例

非常感谢您的帮助


为清晰起见编辑此代码是一个数值积分代码,它从文本文件中输入一个非常大的被积函数,并使用CUBA库完成积分。我把这个过程从Maple移到C++中,从而提高了速度和精度。该脚本工作非常出色,复制已知值的速度比Maple/Mathematica快约400倍。

也许最简单的方法就是这样

double myfunc(long double x){
   return
   #include MY_FILENAME
}
然后,当您在
process_command()
中调用编译器时,向其传递一个附加参数:

"-DMY_FILENAME=/path/to/your/file"
这是一个字符串,您需要使用
argv[1]
或存储文件名的任何内容构建它


如果您调用调用编译器的bash脚本,则需要将文件名作为参数传递给脚本,并安排脚本将其与
-DMY_filename=
一起传递给编译器本身。

WhiZTiM的注释/链接让我意识到这是一个非常愚蠢的问题,因此为浪费您的时间表示歉意。我想要的可以在bash脚本中完成。我只是在
main.cpp

double myfunc(long double x){
   return
   #include <filename>
}
然后在脚本末尾编译并运行命令


谢谢你在这个问题上的帮助。我不敢相信我没有看到解决方案如此简单。

这根本不是C++的工作原理。你想解决的问题是什么?您需要后退一步,重新评估情况。无论出于何种原因,在函数范围内执行
#include…
几乎肯定是个坏主意。不过,也许,这是相关的,然后你可以使用一些编译器SwitcIT控制宏,它是一个数值积分例程,最初是在Maple/Mathematica中完成的,但是我需要一个速度增加,所以将Maple的整合式转换成一个C++兼容的格式,并使用古巴库将这个文件输入到C++例程中。它确实提供了一个令人满意的速度增长,我只是想通过用BASH脚本来自动化计算过程,你确信这是从数值集成库中获得C++函数的唯一方法吗?查看是否可以找到库中接受一些输入并返回定义了
double operator()(double)
的对象的部分
input_file=( "$PWD/${@}" )
cp ${HOME}/.../main.cpp $PWD
sed -i "s|filename|${input_file}|g" main.cpp