我有一个使用模板的多文件项目。

// 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文件中。

10-08 17:28