成员函数指针表

翻译 2012年03月31日 17:07:36

函数指针和成员函数指针的一个公共用途是,将它们存储在函数表中。函数表是函数指针的集合,在运行时从中选择给定调用。

对具有几个相同类型成员的类而言,可以使用这样的表来从这些成员的集合中选择一个。假定扩展screen类以包含几个成员函数,其中每一个在特定方向移动光标:

class Screen
{
public:
	//other interface and implementation members as before
	//same type of functions for cursor movement, can be integrated into member function pointer array.
	Screen &   home();
	Screen &	 forward();
	Screen &  back();
	Screen &  up();
	Screen & down();
};

我们可能希望定义一个move函数,它可以调用这些函数中的任意一个并执行指定的动作,为此,在Screen中增加一个static成员,该成员是光标移动函数的指针的数组。
class Screen
{
	//Action is pointer that can be assigned any of the cursor movement members
	typedef Screen & ( Screen:: * Action )  ();
	//function table
	static Action menu[];

	//specify which direction to move
	enum Directions { HOME, FORWORD, BACK, UP, DOWN };
	Screen & move ( Directions );
};

名为menu的数组将保存指向每个光标移动函数的指针,将在对应于Direction中枚举成员的偏移位置保存那些函数,move函数接受枚举成员并调用适当函数:

Screen & Screen::move( Directions cm )
{
	//fetch the element in Menu indexed by cm
	//run that member on behalf of this object
	( this->*menu[cm])();
	return *this;
}

调用move时,传给它一个枚举成员,指出向哪个方向移动光标:

	Screen myScreen;
	myScreen.move(Screen::HOME);
	myScreen.move(Screen::BACK);

剩下的是定义和初始化表本身:

Screen ::Action Screen ::menu [] =
{
	&Screen::home,
	&Screen::forward,
	&Screen::back,
	&Screen::up;
	&Screen::down
};


相关文章推荐

c++ 成员函数指针

C++类成员函数指针2

C++知识点随笔(七):成员函数指针、模拟虚函数列表

成员函数指针普通的全局函数指针定义:typedef void (*PFUN)();普通的函数指针可以指向返回值和参数类型都相同的全局函数,可是成员函数该怎么办呢?如果成员函数是static的,那么可以...

成员函数指针与高性能的C++委托(下篇)

Member Function Pointers and the Fastest Possible C++ Delegates 撰文: Don Clugston 翻译:周翔 (接中篇...

成员函数指针与高性能的C++委托

成员函数指针与高性能的C++委托 Member Function Pointers and the Fastest Possible C++ Delegates   撰文:Don Clugs...

透过汇编另眼看世界之类成员函数指针

前言:在CSDN论坛经常会看到一些关于类成员函数指针的问题,起初我并不在意,以为成员函数指针和普通的函数指针是一样的,没有什么太多需要讨论的。当我找来相关书籍查阅了一番以后,突然意识到我以前对成员函数...
  • tnt32
  • tnt32
  • 2011-11-11 10:46
  • 192

C++成员函数指针详细使用指南

在C++程序中,很多函数是成员函数,即这些函数是某个类中的一部分。你不可以像一个普通的函数指针那样指向一个成员函数,正确的做法应该是,你必须使用一个成员函数指针。一个成员函数的指针指向类中的一个成员函...

成员函数指针与高性能的C++委托

成员函数指针与高性能的C++委托   引子 标准C++中没有真正的面向对象的函数指针。这一点对C++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(deleg...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)