我计划导出一个可以将报告保存为JPEG图像的API
DECLARE_INTERFACE_(IImageSaving, IUnknown)
{
...
HRESULT SaveReport(
const wchar_t* imageFilepath,
unsigned int imageFormat,
float imageQuality,
bool imageAlphaSupport,
unsigned int reportDetailLevel,
long long reportTime,
const wchar_t* reportAuthor,
);
...
}
我担心此API中的参数太多。我应该导出两个结构并将这些相关参数放在struct中吗?像这样
struct ImageDesc
{
const wchar_t* imageFilepath;
unsigned int imageFormat;
float imageQuality;
bool imageAlphaSupport;
};
struct ReportDesc
{
unsigned int reportDetailLevel;
long long reportTime;
const wchar_t* reportAuthor;
};
DECLARE_INTERFACE_(IImageSaving, IUnknown)
{
...
HRESULT SaveReport(
const ImageDesc& imageDesc,
const ReportDesc& reportDesc
);
...
}
当函数需要太多参数时,我更喜欢将组相关参数放入一个结构中。更清楚地说明这些参数是什么。但我不知道边界地区是否存在问题(维护,可用性等)。
答案 0 :(得分:1)
这里唯一的强制信息是文件名,所以我要做的第一件事就是把它作为一个单独的参数传递。
我宁愿为所有其他参数和特定函数设置默认值来更改它们。
如果您要使用两个结构,您将强制用户指定他/她可能没有任何线索或不需要指定的值,或者必须提供将这些结构初始化为默认值的函数( àLOSIX,这是一个大约1990年的C界面,但现在是2015年。)
你也可以有一个约定,你可以传递NULL ptrs来获取默认值,但这往往会产生丑陋的代码,如do_something (whatever, NULL, NULL);
无论如何,分组参数已经比单独传递它们有了很大的改进。我们不需要其他Microsoft API:)。