这里的动机是建立一个对数据进行操作的函数库,而不需要了解数据.在下面的示例中,test_me使用实际数据类型(int)调用窗口小部件模板.并派生一个小部件,作用于传递的数据.然后将它们传递给一个库例程,该例程将数据指针传递给虚拟act方法.
template <class T>
class widget
{
public:
widget() {}
virtual ~widget() {}
virtual void act( T *p ) = 0;
};
class int_widget : public widget<int>
{
public:
int_widget() : widget() {}
virtual ~int_widget() {}
virtual void act( int *p ) {
printf( "*p=%d\n", *p );
}
};
void pass_to( void *data, widget<void> *wvp )
{
wvp->act( data );
}
void test_me()
{
// we want to pass 42 to an int_widget...
int i = 42;
int_widget iw;
// …Run Code Online (Sandbox Code Playgroud)