关于调用类中的模板成员函数的语法问题,对C++模板有所研究者进

aclaire 2006-11-13 09:51:01
我用VC6写的小段程序

#include "stdafx.h"
#include <string>

class AAA
{
public:
template <typename T>
void f(void (*pf)(const T &aT))
{
}

};

void gg(const std::string &str)
{
}

int main(int argc, char* argv[])
{
AAA a;
a.f<std::string>(gg);//error C2275: 'std::string' : illegal use of this type as an expression
return 0;
}
对于上面编译错误不知如何解决?应该怎样正确调用类中的模板成员函数呢???
...全文
206 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
OOPhaisky 2006-11-13
  • 打赏
  • 举报
回复
vs和g++都通过编译,建议搂住升级编译器到vs2003/2005,vc6对很多c++特性支持的不太好。
oowgsoo 2006-11-13
  • 打赏
  • 举报
回复
看不懂你要传什么参数?这里实际上应该传递一个函数指针和一个参数吧,那么可以这样写:
#include "stdafx.h"

#include <string>

class AAA
{
public:
template<typename Fun, typename Para>
void f(const Fun& fun, const Para& para)
{
fun(para);
}

};

void gg(const std::string &str)
{
printf("%s\n", str.c_str());

}

int main(int argc, char* argv[])
{
AAA a;
a.f(gg, "wgs");//error C2275: 'std::string' : illegal use of this type as an expression
return 0;
}
如果是只想传递一个函数指针,那么参数模板似乎没有什么意义吧,关键是你的目的是什么?
taodm 2006-11-13
  • 打赏
  • 举报
回复
呃,想起来了,VC6好像不支持模板成员的。
你得换设计了。恐怕要把AAA写成模板的了。
aclaire 2006-11-13
  • 打赏
  • 举报
回复

直接 a.f(gg)也是不行的,你可以试试
taodm 2006-11-13
  • 打赏
  • 举报
回复
直接 a.f(gg);
aclaire 2006-11-13
  • 打赏
  • 举报
回复
我们的项目就用VC6,这点没法改的,所以就想在VC6下把问题解决,唉
huangyangman 2006-11-13
  • 打赏
  • 举报
回复
到2005下试吧 6.0确实不好

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧