Noobie程序員在這裏,只是學習C++的類模板。模板類功能
我目前的項目需要我創建一個模板類,可以將整數,雙精度或字符串作爲參數。到目前爲止,每次創建類函數的實現時,我都必須爲每個函數(每個參數類型一個)創建3個函數。
我的問題是,如果一個特定的類函數的實現完全一樣,無論參數類型如何,是否有辦法爲它編寫一個實現?
在此先感謝所有答覆!
Noobie程序員在這裏,只是學習C++的類模板。模板類功能
我目前的項目需要我創建一個模板類,可以將整數,雙精度或字符串作爲參數。到目前爲止,每次創建類函數的實現時,我都必須爲每個函數(每個參數類型一個)創建3個函數。
我的問題是,如果一個特定的類函數的實現完全一樣,無論參數類型如何,是否有辦法爲它編寫一個實現?
在此先感謝所有答覆!
這個問題稍微不清楚 - 首先你說類模板採用了不同的參數,但是聽起來就像你的成員函數正在使用這些不同的參數。
如果你的模板類是什麼樣子
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;
}
對不起,如果我的問題不清楚。當我嘗試從模板類的接口分離實現時,我的問題主要是鏈接器錯誤。我甚至用你在回覆中寫的方式嘗試了它,但仍然存在鏈接錯誤。 – user5540318
@ user5540318請參閱http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file。 – Quentin
@ user5540318你爲什麼不問你的實際問題?我將把這個問題作爲重複來解決。 – molbdnilo
是的,使用模板... –
這是模板存在的核心原因。請參閱http://en.cppreference.com/w/cpp/algorithm/max。 –
我作爲一個愚蠢的關閉,因爲它從意見中變得清楚,當試圖從接口分離實現時,實際的問題是獲取鏈接器錯誤。 – molbdnilo