2010-11-24 65 views
0

我需要爲每種類型使用不同的函數,但大部分代碼保持不變。C++:如何檢查模板函數中使用哪種數據類型?

我如何測試我收到的數據類型(或結構)到我的模板函數參數?如果你打電話f(x, y),然後在函數模板fTU是從參數xy推導出的類型

template <typename T, typename U> 
void f(T t, U u) { } 

回答

6
如何測試我收到的數據類型(或結構)到我的模板函數參數?

你爲什麼要這樣做?如果你想使用模板,那是因爲每種類型的代碼都是一樣的。否則,你只需使用常規的重載函數。

在另一方面,如果你有只是一個算法需要是類型特異性的一部分,沒有什麼可以阻止使用重載的子功能從模板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 ... 
+0

嗯我猜你是對的 – Newbie 2010-11-24 19:24:30

1

你的模板應該有一個模板參數列表。 (當然,你可以做比這更復雜的事情,但這是最基本的用例。)

0

如果部分模板專門化是不夠的,你可以使用RTTI來比較一個對象的類型和另一個的類型。例如,如果您的模板採用了兩種類型的參數,則可以測試typeid(T) == typeid(U)以查看它們是否相同。

+0

啊,但它不可能檢查具體類型,只有兩種類型的差異可以測試? – Newbie 2010-11-24 19:33:10

相關問題