[我希望在C ++ 11中编写一个通用类(例如:template <Class T>
),但有人告诉我该实现只能写在.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>;