所以在我当前的项目中,我有main.cpp,fruit.h和fruit.cpp。
在main.cpp中,它的当前显示如下:
#include "fruit.h"
#include <Mouth.h>
int main() {
Fruit orange;
orange.wash(); //wash is a method of the Fruit class
Mouth mouth = NULL; //Mouth is a library I am using
if(mouth_init() != 0) {
return 1;
}
mouth = create_new_mouth();
if (mouth == NULL) {
return 1;
}
mouth_eat(orange);
clean_up_mouth();
mouth = NULL;
}
显然这是一个过于简化的例子,因为我的实际库init和exit函数更复杂。但我正在考虑从main中取出初始化并清理代码,并创建辅助函数。现在我可以将这些辅助函数放在main.cpp中,但我正在考虑创建一个名为mouth.cpp的新C ++文件,并将函数放在那里。但是由于mouth.cpp没有上课,并且只包含我的帮助函数,这是合法的甚至是好的做法吗?如果允许,我是否应该创建一个包含函数声明的mouth.h文件?
答案 0 :(得分:2)
在header / cpp文件中只有函数对于C ++来说完全没问题。但是,IMO,使用一个简单的类进行库初始化和去初始化会更优雅。
struct MouthLibHolder
{
MouthLibHolder(const MouthLibHolder&) = delete;
MouthLibHolder& operator=(const MouthLibHolder&) = delete;
MouthLibHolder()
{
if (!mouth_init())
throw std::runtime_error("Failed to init Mouth library");
}
~MouthLibHolder()
{
clean_up_mouth();
}
};
然后您可以在主要功能中使用此代码,如:
main()
{
try {
MouthLibHolder mouthLib;
...
}
...
}
持有人可能在单独的h / cpp文件中实现。
答案 1 :(得分:0)
创建.cpp和.h文件,并确保将所有内容都包装在namespace
中
您还可以考虑将静态类定义为辅助函数,它将这些函数作为方法
答案 2 :(得分:0)
但是因为mouth.cpp不会有一个类,并且只包含我的帮助函数,这是合法的甚至是好的做法吗?
您可以将每个函数和/或全局对象放入单独的.cpp文件中。这仍然是“合法的”,但最有可能是不切实际的。良好的做法是品味的问题所以它是主观的。您可能应该将这些函数放在单独的命名空间或类或两者中,但即使您不想为小型或中型项目执行此操作,也可以完全正常。
答案 3 :(得分:0)
是的,这也是合法和良好的做法。在头文件中编写辅助函数声明及其在源文件中的定义。