最近我在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 Parameters 的例子:
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)使用这种技术。 在传递许多参数时,使用此库是否被视为最佳实践?
或者也许使用这个库有真正的好处,我没有看到? 您会建议在项目中使用这个库吗?