我将使用这个方法http://www.parashift.com/c++-faq-lite/separate-template-fn-defn-from-decl.html来将C++模板函数的定义与声明分离,以避免在头文件中混杂着代码。
该链接以一个没有参数或返回值的函数为例,但假设我有一个带有参数的函数。该链接建议采用以下安排:
该链接以一个没有参数或返回值的函数为例,但假设我有一个带有参数的函数。该链接建议采用以下安排:
// File "f.h"
template <typename T> void f(T t);
// File "f.cpp"
#include "f.h"
template <typename T> void f(T t) {
// do something
}
template void f<int>(int t);
// other specializations as needed
然而,如果您在尖括号中省略类型,似乎专业化也会起作用,因为我认为编译器可以从参数类型推断出类型:
template void f(int t);
但我在想,这样做是否有效?
Visual C++ 12 (2013)
extern
将其变为显式实例化声明,如果它在头文件中)。 - Jonathan Wakely