提升参数库(Boost Parameters library)

2019-07-31 01:37发布

最近我发现参数库在加速。 老实说,我不明白这是为什么升压的一部分的原因。 当有需要几个参数传递给函数,你可以从他们做出的结构,如:

struct Parameters
{
    Parameters() : strParam("DEFAULT"), intParam(0) {}
    string strParam;
    int intParam;
};

void foo(const Parameters & params)
{
}

Parameters params;
params.intParam = 42;
foo(params);

这是很容易编写和理解。 使用升压参数既然例如:

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库(短耳)的使用这种技术。 是否考虑使用该库要通过许多参数的最佳做法?

或者,也许有使用这个库,我没有看到真正的实惠? 你会建议在项目中使用这个库?

Answer 1:

你的技术需要创建大量的临时的(给予足够的参数),并在某些情况下相当冗长。 东西是更棘手的是文档。 如果你去配置结构的路线,你将有你需要解释一下你的参数两个地方。 记录Boost.Parameter功能是很容易比较。

它也保持了冗长下来,让我可以重新使用论据的功能,而不是一遍一遍组成一个新的配置载体全家。

如果你不喜欢的库,不使用它。 它有你没有提到的其他几个缺点(包括重高的编译时间)。

另外,为什么不只是提供最好的两个世界? 使用Boost.Parameters一个功能,另一个使用配置结构,其中两个派遣一个共同实施。 正确处理头和“不支付你不使用什么”的承诺将保持不变。 价格是可维护性。 但你总是可以弃用一个接口,如果用户不喜欢它。



Answer 2:

好吧,我不使用这个库,但关键是,你可以通过名称传递参数。

试想一下,你有很多的参数的函数,并且在大多数情况下,你只需要使用一些。 也许并不总是相同的数,在列表中(这样其他人可以提供为默认值)的前面,所以把这些也无济于事。 这也正是“命名参数”的东西进来:你刚才给你想传递,在你喜欢的任何命令参数的名称和值,和其他人将被默认。 你甚至不必知道所有可能的参数; 该功能的更高版本,可以在不破坏任何东西(提供新参数的默认值被选择以模仿旧的行为)添加新的参数。

相较于结构,你可以做一个结构和初始化默认一切。 这几乎是这些东西的内部工作原理安韦,如果我没有记错,四周传递参数对象并将其传递到实际的功能在年底之前有设置值。



文章来源: Boost Parameters library