怎么在模板类中定义一个函数来返回指向类中其它成员函数的指针
如何在模板类中定义一个函数来返回指向类中其它成员函数的指针
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中的一个成员函数,应该如何定义呢?
------解决方案--------------------
就你的例子,扩展如下:
------解决方案--------------------
两个地方---
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
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; }