function_template.cpp 727 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include<iostream>
  2. #include<string>
  3. template<typename T>
  4. void fun(T data=1) //当有默认参数的时候默认参数本身不能模板类型推导
  5. {
  6. std::cout << data << std::endl;
  7. }
  8. template <typename T1,typename T2, typename R1>
  9. R1 fun1(T1 a, T2 b) //这里R1需要显示指定,因为并没有能推导的地方
  10. {
  11. return a + b;
  12. }
  13. template <typename T1, typename T2>
  14. auto fun2(T1 a, T2 b) -> decltype(a < b ? a : b) //当然有的时候可能ab是引用会推导出引用
  15. {
  16. return a < b ? a : b;
  17. }
  18. template <typename T1, typename T2>
  19. auto fun3(T1 a, T2 b) ->std::decay_t<decltype(a < b ? a : b)> //当然有的时候可能ab是引用会推导出引用,外层剥离引用
  20. {
  21. return a < b ? a : b;
  22. }
  23. int main()
  24. {
  25. fun(1);
  26. fun<int>();
  27. }