我有一个名为 SetParams(...)
的 C 函数,它具有可变数量的参数。该函数建立了一个静态数据结构(我们将其命名为Data
)。 SetParams
与参数对一起使用,例如SetParams("paramA", paramA_value, "paramB", paramB_value)
等也可以多次调用,例如
SetParams("paramA", paramA_value);
SetParams("paramB", paramB_value);
...
设置完所有“参数”后,将调用另一个不带参数的函数(让我们将其命名为Execute
):
Execute();
// uses data from static 'Data' and performs error_handling and execution
我想知道我是否可以以更面向对象的方式构建这种代码。因此,我需要一些建议,尤其是关于错误处理的建议,因为某些参数对可能与其他参数相矛盾。
最佳答案
在 C 中创建面向对象设计的一般做法是,对于您拥有的每个方法,您都将传递对用于存储所有类成员变量的结构的引用。换句话说,在 C++ 中你有 listObj.clear()
你在 C 中有 list_clear(&listObj)
。
这有点丑陋,但这是必要的,除非您想使用静态成员变量并将实现限制为仅使用一次。
在下面的示例中,请注意每个方法中如何传入对 struct ParamUtilObj 的引用。
// --- paramUtil.h
// Stores all the objects member variables (public and private)
struct ParamUtilObj {
int paramCnt;
char param1[25];
char param2[25];
...
};
bool paramUtil_initialize( struct* ParamUtilObj pData );
bool paramUtil_addParam( struct* ParamUtilObj pData, const char* pKey, const char* pValue );
bool paramUtil_execute( struct* ParamUtilObj pData);
关于可变参数方法。如果可能的话,我会尽量避免使用它们,一次只添加一个。在我看来,验证参数的业务逻辑是一个完全不同的话题。我需要更多信息来推荐最佳方法。但是......在我看来,因为你将不得不进行验证,例如 if( MethodA ) 然后检查是否存在其他参数......为用户的每个 MethodType 创建多个 SetParam 方法可能更容易可以在脚本中指定。
关于c - C 中参数数量可变的函数和面向设计的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1260109/