转发:某些函数需要将其一个或多个实参连同类型不变地转发给其他函数

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);
}
时间: 2024-10-01 02:35:33

转发:某些函数需要将其一个或多个实参连同类型不变地转发给其他函数的相关文章

基类类型和派生类型之间的转换以及虚函数

1 #include <string> 2 #include <iostream> 3 using namespace std; 4 5 class Animal{ 6 public: 7 Animal(string name) : name(name){} 8 void printName(){ 9 cout<<name<<endl; 10 } 11 virtual void printSpecialSkill(){}; 12 private: 13 st

输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数求1/1+1/3+...+1/n。

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> window.onload = function () { /* 函数名:evenSum 传入值:整数数值number 作用:输入n为偶数时,调用函数求1/2+1/4+...+1/n,当

python小练习,打出1-100之间的所有偶数,设计一个函数,在桌面上创建10个文件,并以数字命名,复利计算函数

练习一:打出1-100之间的所有偶数 def even_print(): for i in range(1,101): if i % 2 == 0: print (i) even_print() 练习二:设计一个函数,在桌面上创建10个文件,并以数字命名 def text_creation(): path = 'C:/Users/Administrator/Desktop' for name in range (1,11): with open(path + str(name) + '.txt'

c程序设计 8.12 用牛顿迭代法求根。方程为:ax^3+bx^2+cx+d=0 ,系数a,b,c,d由主函数输入。求X在1附近的一个实根。求出后由主函数输出.

//https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95/10887580?fr=aladdin#4 //百度牛顿迭代法 #include <stdio.h> #include <math.h> double solut(double a,double b,double c,double d) { double x1=1,x,f,f1; //迭代 do { x=x1; f=((a*x+b

阶乘之和(防止int类型溢出的小技巧&amp;计时函数)

计算前n个正整数阶乘之和的后六位: 注意点是,用一个int类型储存阶乘之和时,要防止溢出 一,在每一次处理阶乘(fa)或者阶乘之和(s)时,都对10^6取余,这样最终结果不变,还避免了越界 二,计时函数可以用来观察程序执行时间 用法: printf("%f",(double)clock()/CLOCKS_PER_SEC); 代码: #include"iostream" #include"ctime" using namespace std; in

函数的递归,二分法,三元表达式,列表生成式,字典生成式,匿名函数,内置方法

1 递归函数 函数在调用阶段,直接或间接的调用了自身 递归函数不应该一直递归下去,我们不考虑它到底循环多少次,我们只考虑它的结束条件 递归函数分为两个阶段 1 回溯:就是一次次重复的过程,这个重复的过程,每一次都应该比上一次简单 2 地推:一次次往回推导的过程 2 二分法 可以在一个有序的序列,快速的查找一个元素: b = [1,2,3,4,5,6] a = 3 def func(l,n): if not l: return ret = len(l) // 2 if n > l[ret]: li

在函数调用时:位置形参、位置实参、关键字实参的特点

'''形参 在函数定义阶段括号内定义的参数,称之为形式参数,简称形参, 相当于变量名. ''' def func(x,y): if x > y: print(x) print(y) '''实参 在函数调用阶段括号内传入的参数,称之为实际参数,简称实参, 相当于变量的值. ''' func(1,2) '''位置参数 位置形参: 在函数定义阶段,按照从左到右的顺序依次定义的形参, 称之为位置形参. 特点: 按照位置定义的形参,都必须被传值,多一个不行,少一个也不行. 位置实参: 在函数调用阶段,按照

8. react 基础 - props 默认值和类型限制 与 Props , State , render 函数 关系

一. PropTypes 与 DefaultProps 官方文档 1. PropTypes 属性校验 引入 PropTypes import PropTypes from 'prop-types'; 强校验 props 属性 eg: import React, { Component } from 'react' import PropTypes from 'prop-types' class TodoItem extends Component{ constructor(props){ sup

C++省略号类型和参数个数不确定函数参数范例

声明:所有权利保留. 转载必须说明出处:http://blog.csdn.net/cartzhang/article/details/44203651 今天想写个宏定义,发现宏定义里也可以写不定参数,但是我的宏最终没有用. 因为我觉得写完,这个不定参数给我带来的麻烦,比好处好想多. 因此我就定义了两个宏,用一个宏定义另一个. 把今天这个c++的类型不确定和参数个数不确定的用法先记下来.以备后用啊. 直接代码: #include<cstdarg> // 必备头文件 #include<ios