Biblioteca de parâmetros de reforço

Recentemente eu encontreiParâmetros biblioteca no Boost. Honestamente, não entendi a razão pela qual isso é parte do Boost. Quando há necessidade de passar vários parâmetros para a função você pode fazer uma estrutura a partir deles, como:

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

void foo(const Parameters & params)
{
}

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

Isso é muito fácil de escrever e entender. Agora exemplo com o uso de parâmetros de impulso:

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);

Eu acho que é muito complexo, e o benefício não é tão significativo.

Mas agora vejo que algumas das bibliotecas do Boost (Asio) usam essa técnica. É considerada uma prática recomendada usar essa biblioteca para passar muitos argumentos?

Ou talvez haja benefícios reais de usar essa biblioteca que não vejo? Você recomendaria usar essa biblioteca no projeto?

questionAnswers(2)

yourAnswerToTheQuestion