【问题标题】:Are there important differences to know about between boost::function and std::tr1::functionboost::function 和 std::tr1::function 之间是否有重要的区别?
【发布时间】:2012-07-30 20:14:09
【问题描述】:

我在我的代码中使用了很多 boost,但到目前为止还没有使用 std::tr1。现在我需要一个更复杂的函数指针,就像这两个可以提供的那样。不幸的是,C+11 还不是一个选项。我读到boost::function 对于某些编译器可能会很棘手,例如(Visual Studio 7.1 之前的版本需要一个特殊的portable syntax)但是没有找到关于这个主题的std::tr1::function 的任何信息。两者在内存使用、速度和兼容性方面有什么重要区别吗?

编辑:我目前使用的是 gcc 4.7,但代码也应该在 Visual Studio 上编译,最好也可以在 2005 年等稍微过时的版本上编译

【问题讨论】:

  • 关于内存使用和速度的差异肯定取决于实现,因此在不知道您的平台/编译器的情况下回答这个问题有点困难。除了两者都有不小的开销,所以如果性能/内存真的很紧张,你可能不想使用任何一个,否则我怀疑差异是否足够大。兼容性到底是什么意思?

标签: c++ boost tr1 boost-function


【解决方案1】:

你读了什么?你说的棘手是什么意思?你是指一些只支持boost::function1<void, int>形式而不支持boost::function<void(int)>形式的古代编译器?

std::tr1::function 应该由您的编译器提供,因此如果您的编译器提供了它,那么它应该可以完美地工作,而不是“棘手”(无论您的意思是什么。)

询问 Boost 的具体实现和不是实现的接口规范之间是否有区别是没有意义的。一种实现可能与 Boost 的类似并且没有实质性差异,而另一种实现可能完全不同。 GCC 的 std::tr1::function 是 Boost.Function 的作者贡献的,所以非常相似。

【讨论】:

  • 非常感谢,您对不准确的问题做出了很好的猜测。您对接口和实现之间的区别是完全正确的。升压是升压,但 tr1.... 应该再考虑一下
  • 根据我的经验,boosttr1cxx11 函数对象相当容易交换。它们都提供与已弃用的unary/binary_function 模板的兼容性。如果您的目标是 VS2005 之前的版本,boost::function 是您的最佳选择。
  • @pmr 提出了一个很好的观点,我有点迂腐 - tr1::function 基于 boost::function 所以它们在概念上非常相似,实际上你可能不会注意到大多数之间的差异TR1 实现和 Boost.Function。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多