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); }