我有一个使用模板的多文件项目。
// Foo.h
template <class T>
class Foo
{
T bar;
};
我有一个课程(例如Cup)和该课程的许多子类。
// Cup.h
class Cup
{
};
class Chalice : public Cup
{
};
class SippyCup : public Cup
{
};
// ...etc.
在模板的.cpp文件中,我需要列出所有可能的模板实现,以避免链接器错误。我从C++ FAQ中学到了这一点。
//Foo.cpp
template class Foo<Cup>;
template class Foo<Chalice>;
template class Foo<SippyCup>;
// ...etc.
实际上,我想在代码中的任何时候使用大约20多个子类。在开发中,我一直在创建新的子类。因此,每次创建一个新对象时,都必须将其添加到
Foo.cpp
中此不断增长的列表中。真痛苦有没有办法列出所有这些可能性?
最佳答案
避免这种情况的方法是将模板函数定义放在头文件中(即在实际的模板定义中),而不是放在单独的.cpp文件中。