我希望用C++11编写一个泛型类(如:template
),但我被告知该实现只能在.h
文件中编写。
另一方面,我应该提交一些.cpp
文件。 有人能解释一下这矛盾吗? 如果所有的定义和实现都需要在.h
文件中,为什么我还需要.cpp
呢?
实际上,您根本不需要.cpp
文件,并且有大量仅有头的库示例。
但是,为某些模板实例化提供.cpp
文件可能是有益的,因为这样可以提供另一个项目可以链接的二进制文件。 这可以节省编译时间。
举个例子:
您的标题foo.h
template<typename T>
class Foo {
// some functions
};
如果foo
通常用浮点类型实例化,则可以提供一个foo.cpp
,包含例如。
template class Foo<float>;
template class Foo<double>;
template class Foo<long double>;