2013-03-22 34 views
6

我正在尝试编写一个模板类,它可以根据我通过的<class>形成类。问题是我无法在同一个.h文件中声明和定义。在我的项目中,UTF工具只能使用.cpp文件(用于代码覆盖率等)。我在博客中看到他们说“添加.cpp而不是.h”。这是可取的吗?模板类实现中单独的.h和.cpp文件

Template.h

#ifndef TEMPLATE_H_ 
#define TEMPLATE_H_ 

template<class T> 
class Template 
{ 
public: 
    T Add(T a,T b); 
}; 

#endif /* TEMPLATE_H_ */ 

Template.cpp

#include "Template.h" 

template<class T> 
T Template<T>::Add(T a, T b) 
{ 
    return a+b; 
} 

Main.cpp

#include "Template.cpp" //Is this a good practise? 
#include <iostream> 

int main(int argc, char **argv) { 
    Template<int> obj; 
    std::cout<<obj.Add(3,4)<<std::endl; 
} 

如果这是不可取的,然后我该如何解决这个问题? export

回答

4

必须在每个使用它们的翻译单元中定义模板。这意味着它们必须在头文件中定义。如果您的工具坚持使用扩展名.cpp,那么您可以提供它,就像您一样。

在这种情况下,甚至不需要将伪首部分为.h.cpp。你可以把它全部放在.cpp#include那。

+0

这并非严格对称。尽管将定义放入每个翻译单位是最方便的,并且因此是常见的做法,但这不是必需的。 – 2013-03-22 18:49:03

+0

@MarkRansom是的,你是对的。但是,能够“事先”完成所有需要的显式实例是非常罕见的。 – Angew 2013-03-22 18:50:38

相关问题