很确定我知道这个问题的答案(不认为),但是可以安全地接受/返回std::function
API 中的值(跨模块边界)吗?
我在想“不”,因为我认为不能保证一个供应商的std::function
实施与另一个供应商的实施兼容。是这样吗?
如果我怀疑答案是否定的,那么你们都是如何处理这种事情的?我可能不得不求助于自己的实现,或者只是避免类似的事情std::function
(例如:使用函数指针或函数)。:-( 我发现自己以前在很多情况下都这样做过(重新发明了很多标准 C++ 库,当然遗憾的是,甚至制作了我们自己的符合 STL 的向量类型,同时支持范围 ctor 和填充 ctor、自定义分配器等. 肯定不好玩,我怀疑它是否与标准实现一样好)仅仅是因为可以动态链接到一个库,例如,MSVC 2010 的 std::function 实现来自用 mingw 编写的二进制文件,例如
当然,另一种选择是在我们的 API 中根本不使用这些类型的 C++ 特性,而是使用 C 接口,但这对我们来说代价是相当高的,因为我们使用我们的 API 作为中心 API内部和第三方开发。