【发布时间】:2018-06-13 12:42:41
【问题描述】:
我需要将作为模板类 X 的方法的函数指针变量设置为 X 的方法。
这是一个简单的例子。
X.h:
template<typename T>
class X {
public:
typedef T (*valproc)(T v);
X(T v);
T add(T v);
T val;
valproc curproc;
};
X.cpp:
#include "X.h"
template<typename T>
X<T>::X(T v) : val(v) {
curproc = &X<T>::add;
}
template<typename T>
T X<T>::add(T v) {
return v+val;
}
int main (int iArgC, char *apArgV[]) {
X<int> *p = new X<int>(3);
return p->curproc(7);
}
当我编译这个时,我得到一个错误:
$ g++ -c -g -Wall X.cpp
X.cpp: In instantiation of 'X<T>::X(T) [with T = int]':
X.cpp:15:29: required from here
X.cpp:5:13: error: cannot convert 'int (X<int>::*)(int)' to 'X<int>::valproc {aka int (*)(int)}' in assignment
curproc = &X<T>::add;
显然
int (X::* )(int)与
int (*)(int)不一样
如何定义正确的类型?
【问题讨论】:
标签: c++ templates member-function-pointers