模板可以完全替代宏么?

gemo 2010-01-08 03:48:51
下面这个宏可以写成一个模板函数么

#define FN_(TYPE_)\
{ BaseClass* pBase = new TYPE_();}
...全文
229 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yshuise 2010-01-08
  • 打赏
  • 举报
回复
宏还有有那种脱离传统的理解方式。比如那个什么两个数乘之类的等等。
yshuise 2010-01-08
  • 打赏
  • 举报
回复
宏的优点比如可以防止代码重复,效率等等
确点是不能调试,读代码是静态,没有类型安全。c++是强类型语言,这样可以防止一些错误。
但是宏不具备此项优点,也就是很容易出错。
如果想考验一下自己处理宏的能力可以看看“boost 的预处理器”。
yshuise 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wangchentangjuan 的回复:]
如果一个要调用几百W次的宏耗费是0MS的时候你换成模板类需要70MS左右 效率问题
[/Quote]
宏只是简单的替换。这一特性表明它能做一些事情和不能做一些事情。
wangchentangjuan 2010-01-08
  • 打赏
  • 举报
回复
如果一个要调用几百W次的宏耗费是0MS的时候你换成模板类需要70MS左右 效率问题
yshuise 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yuanlin2008 的回复:]
应该说不能
虽然这两个功能面向的都是代码编译期生成,但是define由于没有语法检测,会更灵活一些.

[/Quote]
外行说的话:
我有两条腿加两只手,如果没有手,会更方便些。
fox000002 2010-01-08
  • 打赏
  • 举报
回复
一般来说,两者各有分工,不能互相取代

两者结合的用法见得挺多
yuanlin2008 2010-01-08
  • 打赏
  • 举报
回复
应该说不能
虽然这两个功能面向的都是代码编译期生成,但是define由于没有语法检测,会更灵活一些.
yshuise 2010-01-08
  • 打赏
  • 举报
回复
宏没类型安全。
macrojj 2010-01-08
  • 打赏
  • 举报
回复
模版可以是模版类,模版函数。
但是宏可以做更多的。
macrojj 2010-01-08
  • 打赏
  • 举报
回复
当然可以了。不过你的pBase 要传出去哇

template <class T>

BaseClass* create()
{
return new T;
}

你要确定T是BaseClass的派生类哦
taodm 2010-01-08
  • 打赏
  • 举报
回复
模板不可以完全替代宏。
你所列代码,属模板最基本应用,望自己找本教材认真打老基础。

64,637

社区成员

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

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