Biblioteca de parámetros de Boost

Recientemente encontréParámetros Biblioteca en el Boost. Honestamente no entendí la razón por la que esto es parte de Boost. Cuando hay que pasar varios parámetros a la función, puedes hacer una estructura a partir de ellos, como:

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

void foo(const Parameters & params)
{
}

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

Esto es muy fácil de escribir y entender. Ahora ejemplo con el uso de Parámetros 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);

Creo que es realmente complejo, y el beneficio no es tan importante.

Pero ahora veo que algunas de las bibliotecas Boost (Asio) usan esta técnica. ¿Se considera una mejor práctica utilizar esta biblioteca para pasar muchos argumentos?

¿O tal vez hay beneficios reales de usar esta biblioteca que no veo? ¿Recomendarías usar esta biblioteca en el proyecto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta