读书人

怎么在模板类中定义一个函数来返回指向

发布时间: 2012-08-28 12:37:01 作者: rapoo

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

读书人网 >C++

热点推荐