1

模板类的实现必须包含在定义它的头文件中。这样的类的实现应该在课堂上还是常规的(就像你对其他所有类一样)但只在头文件中完成?

常规方法的问题是实现变得非常臃肿,因为您需要将模板定义放在前面。我想知道哪种方法是最常见的。

4

1 回答 1

1

可能最常见的方法是编写类定义,然后在另一个文件中编写实现,然后#include将实现文件放在头文件的底部,并且不要将其列在要编译的文件中。这样它们在不同的文件中,但编译器很满意,因为预处理后定义和声明在同一个文件中。

例子:

// header.h

template<typename T>
struct A {
    int dostuff();
};

#include "header.template"

// header.template (not header.cpp, to make it clear that this doesn't get compiled)

template<typename T>
int A::dostuff() { 
   // do stuff
}

预处理器完成后,文件看起来像

template<typename T>
struct A {
    int dostuff();
};

template<typename T>
int A::dostuff() { 
   // do stuff
}
于 2012-04-12T21:18:37.077 回答