一个类中,有几个成员函数都是相似void fun();的类型,本人想把这几个函数放入该类中的一个静态函数表中,怎么写呢?查了一些资料,也按着理解尝试写了几次,总是编译报错。
class FUN
{
private:
void fun1();
void fun2();
static auto funTab[];
…
};
auto FUN::funTab[]={FUN::fun1,FUN::fun2};
…
class FUN
{
private:
void fun1();
void fun2();
static auto funTab[];
…
};
auto FUN::funTab[]={FUN::fun1,FUN::fun2};
…
解决方案
5
typedef void (FUN::*functionType)();
然后用 functionType 作为数组类型就好了
当然把成员函数指针类型直接写到数组类型上也是可以的,不过正常人都不会这么做
然后用 functionType 作为数组类型就好了
当然把成员函数指针类型直接写到数组类型上也是可以的,不过正常人都不会这么做
5
对于类C的一个成员指针
T类型成员指针p
这么定义
T类型成员指针p
这么定义
T C::*p= &C::x; //成员函数指针 pfun T (C::*pfun)()=&C::fun;
使用
C obj; C &ref=obj; C *ptr=&obj; obj.*p =10; ref.*p =10; (ptr->*p) =10; (obj.*pfun)(); (ref.*pfun)(); (ptr->*pfun)();
10
typedef 放在内类
class FUN
{
public:
typedef void (FUN::*function)();
private:
void fun1() {};
void fun2() {};
int func3(int x) { return x; };
static function funTab[3];
};
FUN::function FUN::funTab[3] = { &FUN::fun1, &FUN::fun1, &FUN::fun1 };
class FUN
{
public:
typedef void (FUN::*function)();
private:
void fun1() {};
void fun2() {};
int func3(int x) { return x; };
static function funTab[3];
};
FUN::function FUN::funTab[3] = { &FUN::fun1, &FUN::fun1, &FUN::fun1 };