在任何情况下可调用大于64位
根据我在CAD / CAE应用程序方面的经验,很多。函子可以轻松保存大于64位的数据。在Visual Studio中,您需要超过两个int
,一个double
,一个指针,就可以超过该限制。
,
通常,我不喜欢通过const引用传递callable
对象,因为它不那么灵活(例如,不能在可变lambda上使用)。我建议按价值传递它们。如果您检查stl算法的实现(例如,对于std::for_each
),所有可调用对象也会按值传递。
这样做,用户仍然可以根据需要使用std::ref(func)
或std::cref(func)
来避免不必要地复制可调用对象(使用reference_wrapper
)。
,
没有最佳类型。如果您有不可复制的函子怎么办?第一个模板将不起作用,因为它将尝试使用已删除的副本构造函数。您必须移动它,但随后您将失去(可能)该对象的所有权。这完全取决于预期用途。是的,std :: function可以比size_t大得多。如果绑定成员函数,则它已经是2个字(对象指针和函数指针)。如果绑定一些参数,它可能会进一步扩大。 lambda也是如此,每个捕获的值都存储在lambda中,在这种情况下,lambda实际上是一个函子。如果您的可调用对象具有非const运算符,则const引用将不起作用。它们都不适合所有用途。有时最好的选择是提供一些不同版本,以便您处理所有情况,SFINAE是您的朋友。
本文链接:https://www.f2er.com/3105411.html