C 模板中的型別獲取(一)

2021-08-20 01:14:26 字數 1541 閱讀 1519

// map::value_type is const std::pair

// need reload operator "==" to pass compile

template

bool

operator==(const pair p1, const pairp2)

// basic value type

template

int iscontain(container const &container, itemtype const &item) else else

}return index;

}};

// user defined value type

template

int iscontain(container const &container, itemtype const &item, bool func(itemtype const, itemtype const)) else else

}return index;

}};

對stl容器的元素求和:

元素為基本型別時,用std::accumulate(container.begin(), container.end(), 0);即可,

當元素為自定義的型別時:

template itemtype accumulate(container container, itemtype getvalue)

return

sum;

}

struct pt

int getvalue(pt pt)

int main(), , };

auto sum = accumulate(pts,getvalue); // 執行ok

return

0;}

這樣寫模板函式,type itemtype 當作函式的返回型別, 傳入匿名(lambda) 函式時會報錯不能通過編譯

mismatched types ... main()::

例如:

auto getvaluex = (pt pt)->int;

auto sum = accumulate(pts,getvaluex);

或者:

auto sum = accumulate(pts,(pt pt));

所以模板函式傳入的函式應該是函式指標型別, 返回型別用std::result_of獲取:

template

auto add(container& container, func getvalue) -> typename

std::result_oftypename container::value_type)>::type

return sum;

}

c 11模板 獲取函式的引數型別

假設我們已經知道乙個函式型別的定義double unsigned char unsigned char 如何獲取這個函式定義中的輸入和輸出引數型別呢?c 11提供的模板函式std function和std tuple element可以將乙個函式定義的輸入和輸出引數型別乙個乙個解析出來,下面是實現 ...

C 模板型別推導

內容參考 effective modern c 中的條款1 int x 27 const int cx x const int rx x const int p x 1.paramtype是個指標或引用,但不是個萬能引用 去引用不去const template void f t param f x ...

C 獲取終端型別

region 獲取終端型別 獲取終端型別 public static browserterminalmodel getbrowserterminal 瀏覽器終端型別 public class browserterminalmodel opera核心 public bool presto 蘋果 谷歌核...