是的,我知道动态变量在 C++ 中是不可能的。我正在寻找的是一种解决方法。
这个想法基本上是这样的。我有一堆数学模型。它们都具有完全相同的形式,除了
- 几个函数的数学定义
- 所需的常量:它们的名称、数量和值。
常数的值可能会在实验之间发生变化,但其他一切都是材料模型本身的属性。模型的常量参数在输入文件中以表格形式给出
variable_A=2.0
材料模型(包括所有功能)以前是通过生成代码制作的,通过 Maple 从抽象数学表达式生成,并带有一个很好的 GUI 环境来启动。由于多种原因,这现在很遗憾地被打破了。由于其他一些工作,模型现在在代码中完全相同,除了它们在形式描述上的不同之处。我没有使用整个单独的程序来生成此代码(目前已损坏,并且我们曾经拥有),而是在寻找一种更简单的替代方案,因为现在我只需要在给定文件中大约 20 行来区分一种材料与其他。然而,实现这些模型的用户并不需要任何 C++ 知识。所以虽然我可以简单地要求他们检查文件并在各个地方进行更改,在一个地方并以这种方式定义他们的模型,而无需查看其余代码。
用户定义的函数如下所示。
double myfunction(double arg1, double arg2, vector arg3 ) \\just an example
{
...
...
double a=database.find_constant("a_const");
double b=database.find_constant("b_const");
return sqrt(a*3+pow(b,2)-a/b)+...; \\still example pseudocode
}
顶部的省略号相当难看(代码不错,只是语法繁重且无关紧要),因此我不希望最终用户不得不处理它们。我的问题可能可以通过示例更好地描述:
我最初的计划是在顶部使用宏(是的,我知道,恐怖),这样就可以变成类似
#define A database.find_constant("a_const")
#define FUNCTION pow(A-2,3)
...
double myfunction(...)
{
...
return FUNCTION;
}
但后来我发现你不能嵌套宏。回想起来很明显,但我离题了。然后我意识到我可以改变#define A
语句来创建A
一个全局变量。然后我什至考虑到全局变量。基本上,我所有将这一切都放在一个用户不需要太多 C++ 知识的地方的尝试都是荒谬的和/或非常不安全的。
通常我讨厌问这种开放式的问题,但我真的不想让自己头疼。我只会在这个项目上工作很短的时间,所以设计某种形式的 UI 和/或生成代码是不切实际的。我目前正在寻求“概念证明”。
有没有比让他们通过模型并直接更改函数中所需的行更好的方法呢?
编辑:我没有编写整个项目,也不是最初打算以这种方式工作。我们用于生成这些文件的原始工具使用 Maple 的代码生成,其中函数和变量以 Maple 语法在一个漂亮的 GUI 中输入。不幸的是,GUI 似乎不再(始终如一地)工作,并且一旦我们切换版本,Maple 返回的代码停止产生正确的结果:我们不确定问题到底是什么,我们现在只是在探索其他途径. 新文件也很多比以前的更相似(由于其他工作),这是新技术的动机的一部分。如果我只需要几行代码以一种简单的方式协同工作,我希望我可以绕过代码生成。这不是“为我修好它!” 问题,我只想了解其他选项可能是什么。是的,我知道一开始情况并不好,如果从一开始就计划好了,就不会这样做。但这种设置可能是暂时的,正如我所说,它更像是一个概念证明而不是其他任何东西。
希望现在问题更清楚了。我的问题特别是以一种简单易用的方式将所有内容分组到一个地方。感谢您的耐心等待。