2014-10-01 72 views
2

考慮函數fooC++編譯時類型比較

template <typename T> 
void foo() { 
    do_something(); 
    if (T == int) { 
     do_somehting_else(); 
    } 
} 

換句話說,我希望它do_something(),然後,如果類型爲intdo_something_else()

當然if (T == int) {不會編譯。仍然:有什麼方法可以在C++編譯時比較類型?

回答

5

您可以使用

#include <type_traits> 

// ... 

template <typename T> 
void foo() { 
    do_something(); 
    if (std::is_same<T,int>::value) { 
     do_somehting_else(); 
    } 
} 

您可以瞭解更多關於體型性狀here

+0

這隻適用於條件代碼無論何種類型都有效。否則,你會想將它包裝在另一個專門用於'int'的模板中。 – 2014-10-01 15:59:30

+1

@MikeSeymour是的,但OP的例子不這樣做。他最終會發現並探索其他選擇,但學習類型特徵通常是有用的,並且是許多其他事物的基礎...... :) – 2014-10-01 16:01:11

5

只需使用模板專業化。

template <typename T> void foo() { do_something(); } 

template<> void foo<int>() { do_something(); do_something_else(); }; 
+0

謝謝,更正。 – 2014-10-01 15:59:34