Общая практика создания объектно-ориентированного дизайна в 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);
Относительно вариадических методов. Я постараюсь избежать их, если это возможно, и просто добавлю их по одному за раз. Бизнес-логика для проверки параметров - это, на мой взгляд, совершенно другая тема. Мне нужно больше информации, чтобы рекомендовать лучший подход. Но ... Мне кажется, так как вам придется выполнять проверку, например, если (MethodA), а затем проверить наличие какого-либо другого аргумента ... может быть проще создать несколько методов SetParam для каждого MethodType, который пользователь можно указать в сценарии.