2013-03-22 84 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

相關問題