首页 > 解决方案 > 如何用模板文件组织 C++ 目录,以及如何处理文件之间的#include 调用

问题描述

我有一些使用常规和模板功能的 C++ 软件,我希望正确组织我的目录。为了实现这一点,我遵循这个堆栈问题的指导方针,编写了头文件 (.hpp)、带有常规函数的文件 (.cpp) 和带有模板函数的文件 (.tpp)。但是,我当前的目录组织得很差,就像这样

/
-include/
-src/
--foo.cpp
--foo.hpp
--foo.tpp
--bar.cpp
--bar.hpp
--bar.tpp
--mysoft.cpp
--mysoft.hpp
-Makefile
-mysoft.o

其中 mysoft.hpp 是我的主文件,其中包含#include "foo.cpp"#include "bar.cpp".

关于改进此实现,我有两个问题:

  1. 如果我想将文件移动到 include/ 文件夹而不将它们全部放在 src/ 中,我将如何组织我的软件树?我应该将 .hpp 和 .tpp 文件都放在 include/ 中,还是将 .tpp 文件放在 src/ 中?

  2. 如果某些文件位于 inc/ 中,如何处理源文件、头文件和模板文件之间的 #include 调用?

以下是典型文件的示例foo.cppfoo.hpp以及foo.tpp.

// foo.cpp
#ifndef FOO_CPP
#define FOO_CPP

#include <somelibrary>
#include "foo.hpp"

void foo_f() {
  // some function
}
// foo.hpp
#ifndef FOO_HPP
#define FOO_HPP

void foo_f();

template<class T> class fooclass {
  private:
    int var;
  public:
    void foo_g();
}

#include "foo.tpp"
// foo.tpp
#ifndef FOO_TPP
#define FOO_TPP

template<class T>
void fooclass<T>::foo_g() {
  // some other function
}

标签: c++templatesmakefileorganization

解决方案


推荐阅读