【发布时间】:2012-08-17 21:14:37
【问题描述】:
最近我在 Boost.js 中找到了Parameters 库。老实说,我不明白为什么这是 Boost 的一部分。当需要将多个参数传递给函数时,您可以从中创建一个结构,例如:
struct Parameters
{
Parameters() : strParam("DEFAULT"), intParam(0) {}
string strParam;
int intParam;
};
void foo(const Parameters & params)
{
}
Parameters params;
params.intParam = 42;
foo(params);
这很容易编写和理解。 现在使用 Boost 参数的示例:
BOOST_PARAMETER_NAME(param1)
BOOST_PARAMETER_NAME(param2)
BOOST_PARAMETER_FUNCTION(
(void), // 1. parenthesized return type
someCompexFunction, // 2. name of the function template
tag, // 3. namespace of tag types
(optional // optional parameters, with defaults
(param1, *, 42)
(param2, *, std::string("default")) )
)
{
std::cout << param1 << param2;
}
someCompexFunction(param1_=42);
我认为这真的很复杂,而且好处不是那么显着..
但现在我看到一些 Boost 库 (Asio) 使用了这种技术。 使用此库传递许多参数是否被认为是最佳实践?
或者也许使用这个库有我看不到的真正好处? 你会推荐在项目中使用这个库吗?
【问题讨论】:
-
仅当您看到不想实现的功能时。大多数应用程序只需要/想要非常简单的命令行开关。
-
不,不,不。如果最佳实践使代码的可读性降低,这不是最佳实践,可能带来的任何好处都不值得复杂,boost的某些部分确实很棒,但我会只需将结构用于超过 3 或 4 个参数。
-
@TomKerr 好吧,就我个人而言,我没有看到我需要的太多好处或功能。但也许我图书馆的客户会很感激?
-
@nogard 我理解您的担忧。我曾经从函数中删除 Boost.Parameter 支持以增加编译时间,但人们实际上并不喜欢它,因为指定所有默认值变得非常讨厌。
标签: c++ boost parameters boost-parameter