首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-08-28 
如何在模板类中定义一个函数来返回指向类中其它成员函数的指针templateclass T class Data{void fun1()

如何在模板类中定义一个函数来返回指向类中其它成员函数的指针
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;} 

热点排行