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 库的主要内容,如果未能解决你的问题,请参考以下文章

C++之类与对象

cocos2d-x从c++到jsJS与C++的交互2——JS与C++的“函数重载”问题

C++之父趣谈:与其他新兴语言相比,C++有哪些不足和优势?

C++基础总结:C++ 类与对象初探——继承和重载

C++与C的区别终于说清楚了!

C++ 与 Java/C# 比较