最近我在 Boost 中找到了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) 使用了这种技术。使用此库传递许多参数是否被认为是最佳实践?
或者也许使用这个库有我看不到的真正好处?你会推荐在项目中使用这个库吗?