游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4668|回复: 15

关于C++模板类的问题

[复制链接]

10

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2006-2-14 02:59:00 | 显示全部楼层 |阅读模式
如下,写了一个.h文件。里面声明了一个类Event和一个模板类EventHandler。
Event的方法我在.cpp文件里面实现了,但是好像不能把EventHandler的方法在.cpp里面写,写了的话虽然编译可过,但是实现连接的时候总是说无法解析的方法。 [em6]

现在请教一下这个问题,到底能不能把模板类的方法在.cpp里面实现?


  1. [color=#0000ff]#include[/color] <windows.h>

  2. [color=#0000ff]class[/color] Event
  3. {
  4. [color=#0000ff]public[/color]:
  5.     [color=#0000ff]void[/color]* pSender;
  6.     Event();
  7.     Event([color=#0000ff]void[/color]* pSender);
  8. };

  9. [color=#0000ff]template[/color]<[color=#0000ff]class[/color] CLASSNAME>
  10. [color=#0000ff]union[/color] upEventHandlerFunction
  11. {
  12.     [color=#0000ff]void[/color] (*pfuncEventHandlerFunction)(Event*);
  13.     [color=#0000ff]void[/color] (CLASSNAME::*pmfuncEventHandlerFunction)(Event*);
  14. };

  15. [color=#0000ff]template[/color]<[color=#0000ff]class[/color] CLASSNAME>
  16. [color=#0000ff]class[/color] EventHandler
  17. {
  18. [color=#0000ff]private[/color]:
  19.     CLASSNAME* pclass;
  20.     upEventHandlerFunction<CLASSNAME> upHandlerFunction;
  21. [color=#0000ff]public[/color]:
  22.     EventHandler(CLASSNAME* pclass,[color=#0000ff]void[/color] (CLASSNAME::*pmfunc)(Event*))
  23.     {
  24.         [color=#0000ff]this[/color]->pclass=pclass;
  25.         upHandlerFunction.pmfuncEventHandlerFunction=pmfunc;
  26.     }
  27.     EventHandler([color=#0000ff]void[/color](*pfunc)(Event*))
  28.     {
  29.         pclass=NULL;
  30.         upHandlerFunction.pfuncEventHandlerFunction=pfunc;
  31.     }

  32.     [color=#0000ff]void[/color] Invoke(Event* e)
  33.     {
  34.         [color=#0000ff]if[/color](pclass==NULL)
  35.         {
  36.             (*(upHandlerFunction.pfuncEventHandlerFunction))(e);
  37.         }
  38.         [color=#0000ff]else[/color]
  39.         {
  40.             [color=#0000ff]try[/color]
  41.             {
  42.                 (pclass->*(upHandlerFunction.pmfuncEventHandlerFunction))(e);
  43.             }
  44.             [color=#0000ff]catch[/color](...){}
  45.         }
  46.     }
  47. };
复制代码

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-2-14 09:03:00 | 显示全部楼层

Re:关于C++模板类的问题

当然不行。
这是C++基本常识,模板的实现必须放在.h文件中。除非编译器实现了export关键字。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-2-14 09:39:00 | 显示全部楼层

Re:关于C++模板类的问题

可以,在 .h 文件里 include .cpp 就行了。

85

主题

824

帖子

878

积分

高级会员

Rank: 4

积分
878
QQ
发表于 2006-2-14 10:36:00 | 显示全部楼层

Re: Re:关于C++模板类的问题

congy: Re:关于C++模板类的问题

可以,在 .h 文件里 include .cpp 就行了。

晕 [em7] [em10] [em22]

10

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2006-2-14 14:45:00 | 显示全部楼层

Re:关于C++模板类的问题

看来模板就是模板TvT,还没有具体化。

直到不行就放心写了~

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2006-2-14 15:06:00 | 显示全部楼层

Re:关于C++模板类的问题

C++ Primer里面说不行的!除非有export关键字。另外,你可以看看其他使用模版的程序库,比如STL,它们也是把实现放在了h文件中。不知道最新的vc++2005实现了export了吗?还没用,请用过的兄弟说说!

20

主题

398

帖子

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2006-2-15 11:03:00 | 显示全部楼层

Re:关于C++模板类的问题

的确是不行的~模板类的所有东西(包括函数体)都仅仅是一种声明,就算有错误,也得到真正创建了一个实例的时候编译器才会报错~所以放在cpp中是不行的,因为include的时候引不进来~

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2006-2-15 14:11:00 | 显示全部楼层

Re:关于C++模板类的问题

将实现放到cpp文件后, 在需要创建对象的文件里同时include h和cpp就可以了

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2006-2-15 16:27:00 | 显示全部楼层

Re:关于C++模板类的问题

问下现在哪种编译器实现export了?

我是全放在.h中的,不喜欢include .cpp这样写法

18

主题

279

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
QQ
发表于 2006-2-15 16:41:00 | 显示全部楼层

Re: Re:关于C++模板类的问题

funcman: Re:关于C++模板类的问题

问下现在哪种编译器实现export了?

GCC实现了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 21:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表