怎么在模板类中定义一个函数来返回指向类中其它成员函数的指针

如何在模板类中定义一个函数来返回指向类中其它成员函数的指针
template<class T> class Data
{
  void fun1();
  void fun2();
  void fun3();
};

现在我想在Class DataProcess定义一个函数,他的作用是根据输入参数返回Data::fun1~3

GetFun(uint index)
{
  switch(index)
  {
  case 1:
  return &Data::fun1;
  break;
  case 2:
  ....
  case 3:
  ....
  }
}
这个GetFun也是Class Data中的一个成员函数,应该如何定义呢?

------解决方案--------------------
就你的例子,扩展如下:
C/C++ code
#include  <iostream> 

template <typename T>
class Data {
public:
typedef void (Data::*PFUN)();

static PFUN get_fun(unsigned index) {
  switch (index) {
  case 1:
    return &Data::fun1;
  case 2:
    return &Data::fun2;
  case 3:
    return &Data::fun3;
  }

  // make fun1 the default one
  return &Data::fun1;
}

private:
void fun1() {
  std::cout < < "return fun1" < < std::endl;
}

void fun2() {
  std::cout < < "return fun2" < < std::endl;
}

void fun3() {
  std::cout < < "return fun3" < < std::endl;
}
};

int main(int, char**)
{
Data <int> data;
Data <int>::PFUN pfun = Data <int>::get_fun(2);

(data.*pfun)();
return 0;
}


------解决方案--------------------
两个地方---

template<class T> PFUN Data<T>::GetFun(uint index)
改为:
template<class T> typename Data<T>::PFUN Data<T>::GetFun(uint index)


pfun(data);
改为:
(this->*pfun)(data);
------解决方案--------------------
test.cpp中的问题:
1. default; => default:
2. template<class T> PFUN Data<T>::GetFun(uint index) =>
template<class T> typename Data<T>::PFUN Data<T>::GetFun(uint index)
3. ProcessData中的pfun(data) => (this->*pfun)(data).
我的是在microsoft visual studio 2008编译的,以下是全部代码:

main.cpp
C/C++ code
#include <iostream>
#include "test.h"
#include "test.cpp"

int main(int, char**)
{
  Data<unsigned> data;

  data.ProcessData(1, 1);

  return 0;
}