16.47 编写你自己版本的翻转函数,通过调用接受左值和右值引用参数的函数来测试它。
#include<iostream> #include<string> #include<utility> using namespace std;template <typename T> int compare(const T &a ,const T &b) {if(a<b) return -1;if(b<a) return 1;return 0; }template <typename T> auto sum(T a,T b)->decltype(a+b) {return a+b; } //翻转函数 template<typename F,typename T1,typename T2> void flip(F f,T1 &&t1,T2 &&t2) {f(std::forward<T2>(t2),std::forward<T1>(t1)); }void f(int v1,int &v2) {cout<<v1<<" "<<++v2<<endl; } void g(int &&i,int &j) {cout<<i<<" "<<j<<endl; } int main() {int j=8;compare<const char*>("hi","world");flip(f,j,42);cout<<j<<endl;flip(g,j,42); }