考慮函數foo
。C++編譯時類型比較
template <typename T>
void foo() {
do_something();
if (T == int) {
do_somehting_else();
}
}
換句話說,我希望它do_something()
,然後,如果類型爲int
,do_something_else()
當然if (T == int) {
不會編譯。仍然:有什麼方法可以在C++編譯時比較類型?
考慮函數foo
。C++編譯時類型比較
template <typename T>
void foo() {
do_something();
if (T == int) {
do_somehting_else();
}
}
換句話說,我希望它do_something()
,然後,如果類型爲int
,do_something_else()
當然if (T == int) {
不會編譯。仍然:有什麼方法可以在C++編譯時比較類型?
您可以使用
#include <type_traits>
// ...
template <typename T>
void foo() {
do_something();
if (std::is_same<T,int>::value) {
do_somehting_else();
}
}
您可以瞭解更多關於體型性狀here。
只需使用模板專業化。
template <typename T> void foo() { do_something(); }
template<> void foo<int>() { do_something(); do_something_else(); };
謝謝,更正。 – 2014-10-01 15:59:34
這隻適用於條件代碼無論何種類型都有效。否則,你會想將它包裝在另一個專門用於'int'的模板中。 – 2014-10-01 15:59:30
@MikeSeymour是的,但OP的例子不這樣做。他最終會發現並探索其他選擇,但學習類型特徵通常是有用的,並且是許多其他事物的基礎...... :) – 2014-10-01 16:01:11