1

I came across some code with various typedefs as follows:

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

I don't understand the 'typedef' usage here, so can anyone teach me what does it mean? It looks a little bit complex here.

4

2 回答 2

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);
于 2013-09-12T02:07:34.713 回答
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

其他函数指针类型类似,由于返回类型或参数集的不同,它们各自的含义略有不同。

于 2013-09-12T02:06:11.067 回答