由于函数对象往往会按照值传递和返回,所以,你必须确保你编写的函数对象在经历了传递之后还能正常工作。这意味两件事:
-
你的函数对象必须尽可能小,否则拷贝的开销会非常昂贵。
-
函数对象必须是单态的,也就是说不能使用虚函数。这是因为,如果参数的类型是基类类型,而实参是派生类对象,那么在传递过程中会产生剥离问题。在对象拷贝过程中,派生部分可能会被去掉,而仅留下基类部分。
由于函数对象往往会按照值传递和返回,所以,你必须确保你编写的函数对象在经历了传递之后还能正常工作。这意味两件事:
你的函数对象必须尽可能小,否则拷贝的开销会非常昂贵。
函数对象必须是单态的,也就是说不能使用虚函数。这是因为,如果参数的类型是基类类型,而实参是派生类对象,那么在传递过程中会产生剥离问题。在对象拷贝过程中,派生部分可能会被去掉,而仅留下基类部分。