【发布时间】:2015-08-27 17:04:13
【问题描述】:
KDE/PIM Zanshin 项目在其代码中的多个位置使用 std::mem_fn,事实证明,至少有 1 个 Apple 的 clang 版本(带有适用于 OS X 10.9 的最新 Xcode 的版本)生成无法链接许多相关文件的目标代码。
事实证明可以通过使用boost::mem_fn 而不是std::mem_fn 来规避这个问题。该项目的主要作者并不倾向于增加对所有平台的boost依赖,所以我提出了一个补丁,其中使用了一个条件宏,在需要时扩展为boost::mem_fn。
现在的请求是创建一个模板函数,该函数位于 zanshin 自己的命名空间之一 (Utils::mem_fn(f)) 中,并返回 std::mem_fn(f) 或 boost::mem_fn(f)。这部分要么高于我目前的工资等级......要么根本不可行,因为我什至几乎不了解 mem_fn 函数的目的。
所以问题是:有没有一种简单、紧凑的方式来包装std::mem_fn,理想情况下只有一个模板函数?
主要障碍似乎是返回类型,但由于 zanshin 代码中的所有使用似乎都返回归结为函数指针的内容,因此我尝试使用 void* 返回类型。我预计这会失败,确实如此。
【问题讨论】:
-
澄清一下:“boost 依赖”是“必须安装 boost 才能构建项目”的简写,并不是为了暗示运行时依赖。我认为“他”更喜欢仅在 OS X 上添加对 boost 的构建依赖的原因是我们很可能在这里处理编译器错误。所以问题应该自己解决;不在任何地方使用 boost::mem_fn 意味着代码也将继续使用 std::mem_fn。
标签: c++ c++11 boost wrapper return-type