背景:我有一个复杂的应用程序,我继承并正在扩展(研究生研究项目)。我想确保我的重组对可维护性和可用性产生积极的长期影响——换句话说,我想确保我以尽可能标准的方式为未来可能从事代码工作的人设置东西。我没有时间,也不是我的工作来完全重新构建应用程序。
该应用程序是一个生态系统模型。它由一个用 C++ 编写的共享库组成,可以完成繁重的工作。该库包含在“驱动”模拟的 Java 应用程序中——处理一些数据库 I/O 并提供 GUI。
在我的开发过程中,我为项目添加了许多实用函数,主要是为了在运行时方便地将内部变量打印到控制台(直接来自代码的 C++ 部分)。
我现在将这些函数分解为一个实用程序文件(头文件和 cpp),该文件根据需要包含在其他文件中。我将这些函数放在他们自己的命名空间中,下面是一个示例:Organizing utility functions in C++
问题:如果我想为实用函数编写一些测试,这样我就可以开发和试验而无需重新编译和修改/运行整个模型,这些测试应该在哪里以及如何最好地包含?
如果我在 util.cpp 文件中有 main() 函数,会不会有问题?令我惊讶的是,我尝试了这个并且它有效;我可以独立编译和运行 util.cpp 文件。此外,包含 util.cpp 的主要应用程序仍然可以正常编译和运行。我很惊讶,因为我认为第二个 main() 的存在会是一个问题——尽管应用程序入口点在 java 代码中。
但是我不确定这是否是最好的路线;我没有足够的经验来看待这种策略的未来陷阱。
这是我的 util.cpp 文件的一个简短示例:
#include "util.hpp"
#include <iostream>
#include <vector>
namespace util {
/** Prints a std::vector of doubles in a format that can be
* copied directly into a python console. */
void util::pyprint_vec(const std::vector<double> & v){
std::cout << "[";
for(std::vector<double>::const_iterator it = v.begin(); it != v.end(); ++it){
std::cout << *it << ", ";
}
std::cout << "\b\b]"; // remove the last comma
}
}
int main() {
using namespace util;
using namespace std;
cout << "Testing some of the utility functions...\n";
vector<double> a_vec(50,12.0);
pyprint_vec(a_vec);
cout << endl;
return 0;
}
最终,我设想模板化一些函数(此时它们实际上移动到 util.hpp)并添加到文件中以及能够在其他项目中使用它。提前感谢您的任何建议。