我遇到了一些带有各种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'用法,所以任何人都可以教我这是什么意思吗?这看起来有点复杂。
答案 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
其他函数指针类型相似,由于返回类型或参数集的不同,每个函数指针的含义都略有不同。