我需要爲每種類型使用不同的函數,但大部分代碼保持不變。C++:如何檢查模板函數中使用哪種數據類型?
我如何測試我收到的數據類型(或結構)到我的模板函數參數?如果你打電話f(x, y)
,然後在函數模板f
,T
和U
是從參數x
和y
推導出的類型
template <typename T, typename U>
void f(T t, U u) { }
:
我需要爲每種類型使用不同的函數,但大部分代碼保持不變。C++:如何檢查模板函數中使用哪種數據類型?
我如何測試我收到的數據類型(或結構)到我的模板函數參數?如果你打電話f(x, y)
,然後在函數模板f
,T
和U
是從參數x
和y
推導出的類型
template <typename T, typename U>
void f(T t, U u) { }
:
如何測試我收到的數據類型(或結構)到我的模板函數參數?
你爲什麼要這樣做?如果你想使用模板,那是因爲每種類型的代碼都是一樣的。否則,你只需使用常規的重載函數。
在另一方面,如果你有只是一個算法需要是類型特異性的一部分,沒有什麼可以阻止使用重載的子功能從模板main函數調用:
template <typename T>
bool IsFooBar(T Baz)
{
// here the code is common for every type
// ...
// Here Baz must be modified in a type-speficic way:
DoQuux(Baz);
// ...
return /* ... */;
}
// DoQuux is a regular overloaded function
void DoQuux(int & Baz)
{
// ...
}
void DoQuux(double & Baz)
{
// ...
}
void DoQuux(std::string & Baz)
{
// ...
}
// ... other DoQuux ...
你的模板應該有一個模板參數列表。 (當然,你可以做比這更復雜的事情,但這是最基本的用例。)
嗯我猜你是對的 – Newbie 2010-11-24 19:24:30