我有一个模板类
expof.h:
template <class T>
class ExpOf{
...
}
我在我的代码中反复使用,例如T = double
[以及ExpOf
不应该知道的其他类别。
所以我认为一次又一次地编译它会是一个好主意[或两次......]
expofdouble.cpp:
#include "expof.h"
template class ExpOf<double>;
并在不同的头中声明它,以便在包含expof.h时不会编译它。
expofdouble.h:
extern template ExpOf<double>;
当我编译它(clang-800.0.42.1)时,我得到(很多)警告
expofdouble.h: warning: declaration does not declare anything [-Wmissing-declarations]
extern template ExpOf<double>;
^~~~~~~~~~~~~
我得到了理想的行为吗?为什么警告呢?我可以这样做吗?
答案 0 :(得分:0)
expofdouble.h
应该包含以下这一行:
extern template class ExpOf<double>;
您的声明省略了class
关键字,因此实际上并未声明任何内容。
(请注意,您会收到类似extern int;
的声明的相同警告,这显然对您没有任何帮助。)