将帮助程序函数分离到单独的C ++标头/源文件中

时间:2015-12-30 20:40:10

标签: c++ oop abstraction

所以在我当前的项目中,我有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文件?

4 个答案:

答案 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)

是的,这也是合法和良好的做法。在头文件中编写辅助函数声明及其在源文件中的定义。