外部模板:声明不声明任何内容

时间:2017-01-27 18:03:58

标签: c++ templates declaration extern

我有一个模板类

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>;
                ^~~~~~~~~~~~~

我得到了理想的行为吗?为什么警告呢?我可以这样做吗?

1 个答案:

答案 0 :(得分:0)

expofdouble.h应该包含以下这一行:

extern template class ExpOf<double>;

您的声明省略了class关键字,因此实际上并未声明任何内容。

(请注意,您会收到类似extern int;的声明的相同警告,这显然对您没有任何帮助。)