typedef 在C++代码混乱中

typedef in C++ code confusion

本文关键字:混乱 代码 C++ typedef      更新时间:2023-10-16

我遇到了一些带有各种类型定义的代码,如下所示:

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"用法,所以谁能教我这是什么意思?这里看起来有点复杂。

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

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);
所有

六个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

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