可能重复:
Storing C++ template function definitions in a .CPP file
Why can templates only be implemented in the header file?
Why should the implementation and the declaration of a template class be in the same header file?
我有三个文件。在一个base.h中,我有一个使用模板成员的类:
class Base {
protected:
template <class T>
void doStuff(T a, int b);
};
在base.cpp中,我实现了Base :: doStuff():
#include "base.h"
template <class T>
void Base::doStuff(T a, int b) {
a = b;
}
然后我尝试在我的项目中的另一个类中使用它:
#include "base.h"
void Derived::doOtherStuff() {
int c;
doStuff(3, c);
}
但是我收到一个链接错误,指出它找不到'doStuff(int,int)'
从我所看到的情况来看,如果不将此函数的实现移动到头文件中,这在C ++ 03中是不可能的。有干净的方法吗? (我使用C ++ 11x功能很好。)
答案 0 :(得分:4)
将模板定义与内联函数定义一起放入.inl
文件并将其包含在.h
文件的末尾是一种常见的习惯用法:
base.h
#ifndef BASE_H
#define BASE_H
class Base {
protected:
template <typename T>
void doStuff(T a, int b);
};
#include "base.inl"
#endif
base.inl
template <typename T>
void Base::doStuff(T a, int b) {
a = b;
}