繁体   English   中英

如何创建和指向函数的指针数组?

[英]How do I create and array of pointers to functions?

gcc 6.4.0赢得7 Netbeans 8.2

我不知道我在做什么错。

#ifndef TYPEDEF_H
#define TYPEDEF_H

class Typedef {
   class Alphabet { };
   class Tuple { };
   class Operations { };
public:
   void test();
private:
   Tuple constant(long one, long two, Alphabet& bet, Operations& op) { return Tuple(); } ;
   Tuple expression(long one, long two, Alphabet& bet, Operations& op) {return Tuple(); } ;
};

#endif /* TYPEDEF_H */

===================== .cpp file ========================
#include "Typedef.h"

void Typedef::test() {
   typedef Tuple (*fn)(long, long, Alphabet&, Operations&);
   fn func[]      = { constant, expression };
   Tuple (*fnc[2])= { constant, expression };
}

Typedef.cpp:在成员函数'void Typedef :: test()'中:

Typedef.cpp:6:44:错误:无法将类型'Typedef :: Tuple(Typedef ::)(long int,long int,Typedef :: Alphabet&,Typedef :: Operations&)的'Typedef :: constant'转换为类型'fn {aka Typedef :: Tuple(*)(long int,long int,Typedef :: Alphabet&,Typedef :: Operations&)}'fn func [] = {常量,表达式};

对于所有四个实例重复此错误消息。 我已经尝试过&constant了,并且按预期的那样是行不通的。

类成员函数的特殊之处在于它接受附加的不可见参数this*指针。 同样,成员函数和自由函数是完全不同的类型,即使后者具有与this*类型兼容的额外参数也是this*

要捕获指向成员函数的指针,请使用成员指针语法( Typedef::* ),如下所示:

void Typedef::test() {
  typedef Tuple (Typedef::*fn)(long, long, Alphabet&, Operations&);
  fn func[] = { &Typedef::constant, &Typedef::expression };
}

另外,成员函数的地址只能在完全限定的名称上使用(参考: [expr.unary.op] / 4 ),因此必须使用&Typedef::constant, &Typedef::expression

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM