我可以重构一下吗?

时间:2014-03-19 11:03:04

标签: c

我有struct analyzer_tanalyzers_t,其中有3个analyzer_t类型的变量。 analyzers_t在代码中出现的次数更多,我必须写入/调用所有内容3次,但差异很小。我附上writeFiles作为例子。 任何人都可以给我一个线索,如果(以及如果,那么如何)我可以重构这个?我想把数组放在analyzers_t中。但正如我所说,我以不同的方式调用函数(请参阅writeFiles中的含义)。

typedef struct analyzer_t
{
  unsigned char *buff;
  size_t StartPosition;

}analyzer_t;


typedef struct analyzers_t
{
  analyzer_t analyzer1;
  analyzer_t analyzer2;
  analyzer_t analyzer3;
  unsigned char *Sequence;
}analyzers_t;



int writeFiles(char *name, analyzers_t *analyzers )
{
  if (analyzers->analyzer1.StartPosition > 10)writeFile(name,
       analyzers->analyzer1.buff, &analyzers->analyzer1.StartPosition, dir1);
  if (analyzers->analyzer2.StartPosition > 10)writeFile(name, 
       analyzers->analyzer2.buff, &analyzers->analyzer2.StartPosition, dir2);
  if (analyzers->analyzer3.StartPosition > 10)writeFile(name, 
       analyzers->analyzer3.buff, &analyzers->analyzer3.StartPosition, dir3);

  return 1;
}

2 个答案:

答案 0 :(得分:0)

为什么你的analyzer_t中没有三个analyzers_t的数组,然后你可以为每个数组调用相同的函数。

答案 1 :(得分:0)

在功能中执行常见功能并仅传递不同的信息:

void writeAnalyzer(analyzer_t * analyzer, char * name, char * dir) {
    if (analyzer->StartPosition > 10)
        writeFile(name, analyzer->buff, &analyzer->StartPosition, dir);
}

并且不要在自定义类型中使用后缀_t。这些是为标准C库保留的。