C++“命名参数习语”与 Boost::Parameter 库
Posted
技术标签:
【中文标题】C++“命名参数习语”与 Boost::Parameter 库【英文标题】:C++ "Named Parameter Idiom" vs. Boost::Parameter library 【发布时间】:2010-09-17 05:58:30 【问题描述】:我查看了Named Parameter Idiom 和Boost::Parameter library。每个人都比另一个人有什么优势?是否有充分的理由总是选择一个而不是另一个,或者在某些情况下它们中的每一个都比另一个更好(如果是,在什么情况下)?
【问题讨论】:
我不知道他们两个。虽然他们两个都走了。谢谢极客 答案不够:使用Boost::Parameter
的代码总是嵌入一个隐含的不可测试的转换,+1 命名参数成语
任何人都可以添加指向有效“命名参数习语”页面的链接吗?
Named Parameter Idiom 的工作链接
【参考方案1】:
实现命名参数习语真的很简单,几乎和使用 Boost::Parameter 一样简单,所以它可以归结为一个要点。
-你已经有 boost 依赖了吗?如果你不这样做,Boost::parameter 就不够特别,不值得添加依赖项。
就我个人而言,我从未在生产代码中看到过 Boost::parameter,100% 的时间它是命名参数的自定义实现,但这不一定是件好事。
【讨论】:
谢谢。我确实已经有 Boost 依赖项,但我将使用命名参数。【参考方案2】:通常,我是 Boost 的忠实粉丝,但我不会使用 Boost.Parameter 库有几个原因:
-
如果您不知道发生了什么,
呼叫看起来像您正在分配
范围内变量的值
在调用函数之前
拨打电话。那可以很
令人困惑。
一开始就需要太多样板代码来设置它。
【讨论】:
出于同样的原因,我们应该从 C++ 中删除模板,因为它们复杂且令人困惑。这叫“学习” 模板为语言增添了强大的力量。我认为您不能对命名参数说同样的话。仅仅因为某事很复杂,并不意味着它是有用的。【参考方案3】:另外一点,虽然我从未使用过命名参数惯用语,但我使用 Boost Parameter 来定义多达 20 个可选参数。而且,我的编译时间很疯狂。过去需要几秒钟,现在需要 30 秒。如果您有一个使用您使用 boost 参数编写的小应用程序的东西库,那么这会增加。当然,我可能会错误地实现它,但我希望这会改变,因为除此之外,我真的很喜欢它。
【讨论】:
【参考方案4】:命名参数习语要简单得多。我(现在)不明白为什么我们需要 Boost::Parameter 库的复杂性。 (即使是所谓的“特征”推导参数,似乎也是引入编码错误的一种方式;))
【讨论】:
【参考方案5】:您可能不希望将 Boost.Parameter 用于一般应用程序逻辑,而希望将其用于您正在开发的库代码,因为它可以为库的客户节省大量时间。
【讨论】:
【参考方案6】:从来没有听说过,但是查看链接,命名参数更容易理解。对于 boost 的实现,我会毫不犹豫地选择它。
【讨论】:
以上是关于C++“命名参数习语”与 Boost::Parameter 库的主要内容,如果未能解决你的问题,请参考以下文章
cocos2d-x从c++到jsJS与C++的交互2——JS与C++的“函数重载”问题