游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4887|回复: 10

【求助】用C++的语法取代带参宏定义的较好方法?

[复制链接]

5

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2006-3-16 23:15:00 | 显示全部楼层 |阅读模式
问题:
    1. 针对C++的面向对象的特性,如何用C++取代C中的带参数的宏比较合理一些?
    2. 是不是在C++中就一定最好不要用到宏定义?(呵呵,有点矛盾~)

举例:
    比如这个宏定义:
    #define CHANGE_STATUS(p) {if (p) {p = !p;}}
    现在我在很多类中都要调用这个宏,而且调用的位置也是不确定的,此时用什么方法来代替这个宏比较好呢?
    希望大大们能帮我想想办法~
    谢谢啦!

30

主题

422

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2006-3-16 23:43:00 | 显示全部楼层

Re:【求助】用C++的语法取代带参宏定义的较好方法?

#define CHANGE_STATUS(p) {if (p) {p = !p;}}
貌似就是p=0吧

template<typename T> void CHANGE_STATUS(T p) {p = 0;}

5

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
 楼主| 发表于 2006-3-17 00:26:00 | 显示全部楼层

Re:【求助】用C++的语法取代带参宏定义的较好方法?

哦~
是用摸版啊!
还有其他的方法吗?感觉摸版用起来还是有点麻烦的~
我只是随便举的例子,可能是#define CHANGE_STATUS(p) {if (p==true) {p = false;}}
也可能是 #define CHANGE_STATUS(p) {if (p!=NULL) {p = NULL;}}之类的
关键只是带参的宏怎样改变他以使得符合C++的习惯~

14

主题

67

帖子

75

积分

注册会员

Rank: 2

积分
75
发表于 2006-3-17 18:15:00 | 显示全部楼层

Re:【求助】用C++的语法取代带参宏定义的较好方法?

直接写成内联函数不就可以了吗,用模版不行。那就重载

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2006-3-17 19:13:00 | 显示全部楼层

Re:【求助】用C++的语法取代带参宏定义的较好方法?

1、C++建议使用内联函数代替有参数的宏。
2、编写程序是很随意的事,如果你想用宏就用宏,不想就不用,C++只是建议不要使用宏,可以用const常量和内联函数代替宏。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-3-18 01:10:00 | 显示全部楼层

Re:【求助】用C++的语法取代带参宏定义的较好方法?

最好是模板函数。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-3-18 01:13:00 | 显示全部楼层

Re:【求助】用C++的语法取代带参宏定义的较好方法?

而且用起来也不麻烦,模版函数在编译时会进行隐式演绎,不需要你指定参数类型。
比如:
template<typename T> void SetNull(T* p) { if(p) p=NULL;}
A* a;
SetNull(a);

5

主题

68

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2006-3-18 21:36:00 | 显示全部楼层

Re:【求助】用C++的语法取代带参宏定义的较好方法?

void F(x) {x=0;}
void F(*x) {x=0;}
有什么意义?

14

主题

245

帖子

256

积分

中级会员

Rank: 3Rank: 3

积分
256
QQ
发表于 2006-3-19 02:54:00 | 显示全部楼层

Re:【求助】用C++的语法取代带参宏定义的较好方法?

虽然宏可以被模板代替,但是宏是编译期优化的,模板却不一定是编译期优化。
另像const或是inline也是属编译期优化,但是主要还是看编译器的实现。
尽量让程序在编译期就能得到优化,所以使用哪种方法,只要能达到想要的效果就行了。

5

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
 楼主| 发表于 2006-3-20 10:01:00 | 显示全部楼层

Re:【求助】用C++的语法取代带参宏定义的较好方法?

恩,谢谢大家!

扩展开来说,是不是可以这样认为:也就是在C++中也可以将C中合理实用的东西拿来用(我学习的过程中就觉得宏和全局变量在C中广泛用到,而C++似乎提倡尽量避免这些)?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 23:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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