typedef在C ++代码中的混乱

时间:2013-09-12 01:58:18

标签: c++ typedef

我遇到了一些带有各种typedef的代码,如下所示:

class GAGenome : public GAID {
public: GADefineIdentity("GAGenome", GAID::Genome);

public:
  typedef float (*Evaluator)(GAGenome &);
  typedef void  (*Initializer)(GAGenome &);
  typedef int   (*Mutator)(GAGenome &, float);
  typedef float (*Comparator)(const GAGenome&, const GAGenome&);
  typedef int   (*SexualCrossover)(const GAGenome&, const GAGenome&, 
               GAGenome*, GAGenome*);
  typedef int   (*AsexualCrossover)(const GAGenome&, GAGenome*);
//some other code

我不明白这里的'typedef'用法,所以任何人都可以教我这是什么意思吗?这看起来有点复杂。

2 个答案:

答案 0 :(得分:2)

这些行是定义可用作函数指针的类型。

typedef float (*Evaluator)(GAGenome &);

这将Evaluator类型定义为指向函数的指针,该函数将GAGenome作为其单个参数引用,并返回float

您可以像这样使用它:

float my_Evaluator_Function(GAGenome& g)
{
    // code
    return val;
}

GAGenome::Evaluator pfnEval = my_Evaluator_Function;
float val = pfnEval(myGenome);

答案 1 :(得分:1)

所有六个typedef声明都指定了各种函数的指针。

第一个表示GAGenome::Evaluator类型的变量是一个指向函数的指针,该函数接受(非常量)GAGenome引用并返回float值。那就是:

GAGenome x = ...suitable initializer...;
GAGenome::Evaluator e = ...suitable function name...;

float f = e(x);  // Call the function whose pointer is stored in e

其他函数指针类型相似,由于返回类型或参数集的不同,每个函数指针的含义都略有不同。