哪种算法要求仿函数是纯函数?

时间:2011-08-02 23:02:19

标签: c++ functor

一般来说,标准要求仿函数是纯函数,因为允许算法将仿函数复制到它们的内容中。但是,有一些算法(例如find_if),没有任何理智的实现可以进行任何形式的仿函数复制。

我们能依靠这个吗?

2 个答案:

答案 0 :(得分:4)

“纯粹的功能”是什么意思?

如果你的意思是“函数指针”,那么没有;每个标准算法都可以使用函数对象和函数指针。是的,它们必须是可复制的,但是可复制的仿函数仍然是一个仿函数。

如果你的意思是“可复制”,那么是的。标准库要求算法的类型是可复制的。如果您的仿函数不可复制,则可以使用boost::reference_wrapper<T>将不可复制对象包装在可作为参考的可复制容器中。请注意,此模板已作为std::reference_wrapper<T>添加到C ++ 0x。

答案 1 :(得分:4)

你想要问的是,由于在任意时间被复制,哪些算子需要无状态。

我想不出任何需要使用自由函数的算法,但是大多数/所有算法当然要求对象本身不能保持状态。你可以做的是让对象引用一个在算法调用之外的状态对象。然后,仿函数的任何副本都可以适当地修改该状态对象。