4月1日学习心得

  今天主要是学习了14.8函数调用运算符。函数调用运算符必须是成员函数。下面是一个例子

class PrintString {
public:
	PrintString(ostream &o = cout, char c = ' ') :
		os(o), sep(c) {}
	void operator()(const string &s)const { os << s << sep; }
private:
	ostream & os;
	char sep;
};

  lambda表达式是函数对象。lambda类似于一个模板,在使用它时实现。在使用lamda时非常像使用了相应类的重载运算成员。

  之后是标准库定义的函数对象,但书中的很多对象在现行c++14中不在适用,个人认为没有太大必要使用运算符对象,举例:

plus<int> ip;\\定义了一个模板实现
int i=ip(1,2);

  之后是可调用对象和function。

  类,lambda,函数之间或许有不同的功能,但只要其共有相同的返回值和形参类型就称为有相同的调用形式。int(int,int).

我们可以使用function类表示同一种调用形式的通用类,function在<functional>中。利用map可以将所有有相同调用形式的谓词集合起来。以下为实例:

int add(int i, int j)
{
	return (i + j);
}


int main()
{
	map<string, int(*)(int, int)> binops;
	binops.insert({ "+",add });
	function<int(int, int)> f1 = add;
	function<int(int, int)> f2 = [](int i, int j) { return i - j; };
	map<string, function<int(int, int)>> fmap;
	fmap.insert({ "+",add });
	fmap.insert({ "-",f2 });
	fmap.insert({ "*",[](int i,int j)-> int {return i * j; } });
	fmap["/"] = [](int i, int j) {return i / j; };
	int c = fmap["*"](10, 3);
	cout << c << endl;
	cout << fmap["/"](30, 3) << endl;
	return 0;
}
  可以看到fmap中集合了+,-,*,/四种fucntion。这一点还是非常有实际意义的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值