编写C++&引用;脚本“; 我是一个大型的C++开发人员,我用它来研究(我是博士生)。假设库中有一组实现酷算法的类:Algorithm1,Algorithm2,等等。然后我编写了一组C风格的函数,它们是独立的“脚本”使用该库来测试最近添加的功能,或者运行模拟,生成我在精彩绝伦(我拒绝)期刊出版物中包含的情节。库的设计遵循良好的软件工程原则(尽我所知和所能),但从main.cpp链接库的“脚本”不遵循任何原则,除了“完成工作”

编写C++&引用;脚本“; 我是一个大型的C++开发人员,我用它来研究(我是博士生)。假设库中有一组实现酷算法的类:Algorithm1,Algorithm2,等等。然后我编写了一组C风格的函数,它们是独立的“脚本”使用该库来测试最近添加的功能,或者运行模拟,生成我在精彩绝伦(我拒绝)期刊出版物中包含的情节。库的设计遵循良好的软件工程原则(尽我所知和所能),但从main.cpp链接库的“脚本”不遵循任何原则,除了“完成工作”,c++,design-patterns,coding-style,main,C++,Design Patterns,Coding Style,Main,我现在在一个文件中有300多个这样的“脚本”(20000多行代码)。我对此没有问题,我仍然很有效率,这才是我的最终目标。但我想知道这种方法是否有我刚刚学会忍受的主要弱点 // File: main.cpp #include <cool_library/algorithm1.h> #include <cool_library/algorithm2.h> ... #include <cool_library/algorithmn.h> void scrip

我现在在一个文件中有300多个这样的“脚本”(20000多行代码)。我对此没有问题,我仍然很有效率,这才是我的最终目标。但我想知道这种方法是否有我刚刚学会忍受的主要弱点

// File: main.cpp

#include <cool_library/algorithm1.h>
#include <cool_library/algorithm2.h> 
...
#include <cool_library/algorithmn.h> 

void script1() {
    // do stuff that uses some of the cool library's algorithms and data structures
    // but none of the other scriptX() functions
}

void script2() {
    // do stuff that uses some of the included algorithms and data structures
}

... 

// Main function where I comment in the *one* script I want to run.
int main() {
    // script1();
    // script2();
    // script3();
    ...
    script271();

    return 0;               
}
//文件:main.cpp
#包括
#包括
...
#包括
void script1(){
//使用一些很酷的库的算法和数据结构
//但是没有其他scriptX()函数
}
无效脚本2(){
//使用一些包含的算法和数据结构做一些事情
}
... 
//我在要运行的*one*脚本中添加注释的主函数。
int main(){
//脚本1();
//脚本2();
//脚本3();
...
脚本271();
返回0;
}
编辑1:在这个过程中,我有几个目标:

  • 尽可能减少启动新脚本函数所需的时间
  • 让所有旧的脚本功能在我的指尖上搜索。这样我就可以复制这些脚本并将其粘贴到新的脚本中。请记住,这不是供他人使用的好设计
  • 我不关心脚本文件的编译时间,因为它只需不到一秒钟的时间就可以编译,因为它现在有20000行代码
顺便说一下,在Linux中,我使用Emacs作为我的“IDE”,使用Autoconf/Automake/Libtool进程来构建库和脚本


编辑2:根据这些建议,我开始怀疑在这种情况下提高生产率的部分方法是否不是重新构造代码,而是定制/扩展IDE的功能(在我的例子中是Emacs)。

如果您对它感到满意,并且它对您有效,请坚持使用它。你说你是唯一的开发者,然后你想做什么就做什么。在我的项目中,我总是花太多的时间思考这样的事情:P。我学会了只关注重要和有成效的事情。理论上的东西只在理论上有效…

如果你对它感到满意,并且它对你有效,那么就坚持下去。你说你是唯一的开发者,然后你想做什么就做什么。在我的项目中,我总是花太多的时间思考这样的事情:P。我学会了只关注重要和有成效的事情。理论上的东西只在理论上有效…

你的例子可能是一个很好的例子。更具体地说,你可以把你的<代码>脚本*/Cuffer-C++函数粘到一些解释器上,比如,等等。并用脚本语言编写测试用例

所有脚本语言都允许您粘合C(因此也是C++)函数。 有关Lua,请参见其章节。有关Python,请参见其部分。有关Ocaml,请参见第节。有关诡计,请参见第章

您可能希望将解释器嵌入到
main
函数中,或者可以使用新的
C++
函数扩展现有解释器(因此使用解释器提供的一些
main


请注意,使用某些脚本语言可能会对库和软件的设计和体系结构产生深远的影响

您的示例可能是一个很好的脚本语言用例。更具体地说,你可以把你的<代码>脚本*/Cuffer-C++函数粘到一些解释器上,比如,等等。并用脚本语言编写测试用例

所有脚本语言都允许您粘合C(因此也是C++)函数。 有关Lua,请参见其章节。有关Python,请参见其部分。有关Ocaml,请参见第节。有关诡计,请参见第章

您可能希望将解释器嵌入到
main
函数中,或者可以使用新的
C++
函数扩展现有解释器(因此使用解释器提供的一些
main


请注意,使用一些脚本语言可能会对库和软件的设计和体系结构产生深远的影响

如果我是你,我会将这个巨大的文件拆分为300个较小的文件:每个文件只有一个
scriptNN()
main()
调用它

现在,当您编译它时,您将有300个小型
scriptNN
可执行文件(不过您可能需要为此创建适当的
Makefile

这有什么好处?现在您可以使用这些脚本可执行文件作为构建块,由其他脚本(如bash、python、perl等)放置或调用

编辑解释此设计如何实现您的目标

  • 是时候开始新的脚本功能了——只需复制一个现有的文件并稍作调整

  • 让所有旧的脚本功能在我的指尖就可以搜索-emacs可以跨所有其他脚本文件进行多文件搜索

  • 我不在乎脚本文件的编译时间——那也没关系。但是您可以一次获得所有这些文件,而无需编辑一个大的
    main()
    并重新编译


如果我是你,我会把这个巨大的文件分成300个较小的文件:每个文件只有一个
scriptNN()
main()
调用它

现在,当您编译它时,您将有300个