c++ 模板 类成员函数指针的问题

来源:百度知道 编辑:UC知道 时间:2024/09/25 15:21:15
#include "stdafx.h"

class printclass
{
public:
void print()
{
printf("hello world!\n");
}
};
void print(printclass *cla,void (printclass::*b)())
{
(cla->*b)();
}

int main(int argc, char* argv[])
{
printclass print2;
print(&print2,print2.print);
return 0;
}
这样是可以得到正确的结果,可是使用模板之后便报错了,使用模板之后的代码:
#include "stdafx.h"

class printclass
{
public:
void print()
{
printf("hello world!\n");
}
};

template <class a>
void print(a *cla,void (a::*b)())
{
(cla->*b)();
}

int main(int argc, char* argv[])
{
printclass print2;
print(&print2,print2.print);
return 0;
}

大家指点一下吧……T_T
第一个程序偶又测试了一下,在windowsxp vc6.0下是可以正常运行的。偶这个新建工程的时候新建了一个hello world的例子,然后改,不可以运行是不是头文件的问题?

构造一个指向成员的指针需要显式使用 address-of 运算符('&')和限定名

这里,限定名一般是 “X::” 形式
所以,修改成这样:
print(&print2, &printclass::print);

就可以了

这是语法的规定,print2.print 这个在编译器看来是:
(printclass)print(&print2);

与void (printclass::*b)()这种形式并不匹配,如果你知道了 this 指针的定义,作用,应该能弄明白;&printclass::print 是不带 this 指针的“纯”函数,可用于模板实参推导。

继续加油,类与模板的结合功能就是强。

定义对象的时候也要指定摸版类型,
既然是 定义,就要分配内存空间,对象里包括函数类型必须确定. 格式书上有 加个< >

上边的也报错啊~~

参数不要写 print2.print,写 &printclass::print 。