2015-11-23 106 views
0

Noobie程序員在這裏,只是學習C++的類模板。模板類功能

我目前的項目需要我創建一個模板類,可以將整數,雙精度或字符串作爲參數。到目前爲止,每次創建類函數的實現時,我都必須爲每個函數(每個參數類型一個)創建3個函數。

我的問題是,如果一個特定的類函數的實現完全一樣,無論參數類型如何,是否有辦法爲它編寫一個實現?

在此先感謝所有答覆!

+1

是的,使用模板... –

+1

這是模板存在的核心原因。請參閱http://en.cppreference.com/w/cpp/algorithm/max。 –

+0

我作爲一個愚蠢的關閉,因爲它從意見中變得清楚,當試圖從接口分離實現時,實際的問題是獲取鏈接器錯誤。 – molbdnilo

回答

0

這個問題稍微不清楚 - 首先你說類模板採用了不同的參數,但是聽起來就像你的成員函數正在使用這些不同的參數。

如果你的模板類是什麼樣子

template<typename T> 
class X 
{ 
public: 
    X(const T& t) : m_t(t) {} 
    void print(); 
private: 
    T m_t; 
}; 

你實現print看起來是這樣的:

template<typename T> 
void X<T>::print() 
{ 
    std::cout << m_t; 
} 

的成員函數也可以是一個模板:

template<typename T> 
class X 
{ 
public: 
    X(const T& t) : m_t(t) {} 

    template<typename U> 
    void printBefore(const U& u); 
private: 
    T m_t; 
}; 

的類模板中函數模板的定義如下所示:

template<typename T> 
template<typename U> 
void X<T>::printBefore(const U& u) 
{ 
    std::cout << m_t << u; 
} 
+0

對不起,如果我的問題不清楚。當我嘗試從模板類的接口分離實現時,我的問題主要是鏈接器錯誤。我甚至用你在回覆中寫的方式嘗試了它,但仍然存在鏈接錯誤。 – user5540318

+0

@ user5540318請參閱http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file。 – Quentin

+0

@ user5540318你爲什麼不問你的實際問題?我將把這個問題作爲重複來解決。 – molbdnilo