#include'ing .cpp模板实现文件是一种不好的做法吗?

Gor*_*ley 2 c++ templates build include

在我正在进行的项目中,我有一个相当大的模板类,我已经实现了这样:

我有我的头文件

// MyBigClass.h
#ifndef MYBIGCLASS_H
#define MYBIGCLASS_H

template <typename T>
class MyBigClass {
   /* -- snip -- */
};

#include "MyBigClass.cpp"
#include "MyBigClass_iterator.cpp"
#include "MyBigClass_complicatedFunctionality_1.cpp"
#include "MyBigClass_complicatedFunctionality_2.cpp"

#endif
Run Code Online (Sandbox Code Playgroud)

然后我的所有实现文件基本上都是这样的:

// MyBigClass_foobar.cpp

template <typename T>
void MyBigClass<T>::member_1(){
   /* -- snip -- */
}

template <typename T>
int MyBigClass<T>::member_2(int foo, T & bar){
   /* -- snip -- */
}

// etc, etc
Run Code Online (Sandbox Code Playgroud)

main.cpp,我只是包括MyBigClass.h,一切正常,编译得很好.我将实现分成多个文件的原因是因为我更喜欢处理三个或四个200-400行文件,而不是一个1200行文件.文件本身在逻辑上是相当有条理的,仅包含嵌套类的实现或一组相互关联的成员函数.

我的问题是,这是完成了吗?前几天我向别人展示时,我得到了一个奇怪的反应,所以我想知道这是不是一种不好的做法,或者是否有更好,更常用的方式来完成这样的事情.

Luc*_*ore 5

这是公约通常不包括cpp文件(有些时候这样做是有限的和异国情调的情况下),这可能是你得到了长相怪异的原因.

通常这种分离是通过移动执行到完成.impl,甚至一个.h文件,而不是一个cpp文件.

不,分离模板的实现并在头文件中包含文件没有任何问题.