找回密码
 点一下
查看: 1441|回复: 10

【杯具】构思了一上午,想实现jass的格式化输出,失败!

[复制链接]
发表于 2010-3-12 17:05:10 | 显示全部楼层 |阅读模式
终因jass不支持“函数重载”,“可变参数”


想了一上午最后发现是个死胡同。。。。。。

于是乎,调试的时候还得乖乖的去敲及其繁琐的BJDebugMsg了。。。
发表于 2010-3-12 17:07:34 | 显示全部楼层
请问什么叫做格式化输出
回复

使用道具 举报

发表于 2010-3-12 18:34:46 | 显示全部楼层
printf?
回复

使用道具 举报

 楼主| 发表于 2010-3-12 18:57:32 | 显示全部楼层
恩 没错。
就是 printf( const char *format [, argument]... );

用Jass来实现的难度是,不支持可变参数。
于是我想自己构造堆栈类来实现。
既然不支持可变参数,那么就不用可变参数,反正本质上就是,第一个参数是格式化输出字符串的格式,之后是要输出的参数。

格式化输出的话,要输出的几个变量连接一定要简洁,否则就没有必要做这个了,直接敲字符串转换函数就行了。

于是考虑使用可重载的运算符来把要输出的参数连接到一起。jass中可供重载的运算符只有“[]=”、“[]=”、“>”、“<”、“==”。

有两个方案:
【方案一】
形式:printf(string sFormat, Stack st)

这个st用重载<运算符的方式来连接。
如果成功的话,格式化输出的一个例子是:

[jass]

integer i = 3;
string s = "apples";

printf("I have %d %s.",I(i)<S(s));

[/jass]
I()和S()设计成返回值是Stack类型的全局函数,Stack类中重载<运算符

但是,<运算符进行重载只能返回boolean,计划失败。


【方案二】

形式还是:printf(string sFormat, Stack st)

因为,jass语法上不支持可变参数,因此这个是实现格式化输出的最简形式了。

既然<不行,考虑使用[]。

想达到的结果是Stack重载[],重载的[]函数内实现把参数压入堆栈和堆栈指向下一个位置的功能。

这就需要,1、[]返回的是Stack类型,这样才可以重复使用,2、[]的参数应该是integer、real、boolean等不限的。

结果这两条都是不合语法的。



于是失败。



【方案三】

JAPI——yes,就是这个东西,很久没人讨论了。

既然jass已有语法实现不了简洁的进行格式化输出,只有考虑更底层的方法。

这又遇到如何解决可变参数的问题。。。Faint!



说的有点乱,可能让大家感到不知所云。

总之,想了蛮多途径的。



看各位还有什么想法??

因为有了这个东西,调试的时候输出信息就太方便了,造福后人啊~~
回复

使用道具 举报

发表于 2010-3-12 19:29:29 | 显示全部楼层
那个人是谁?
回复

使用道具 举报

发表于 2010-3-13 13:39:12 | 显示全部楼层
吃饱撑的。。。。。

直接用连接不行?
回复

使用道具 举报

发表于 2010-3-13 13:46:32 | 显示全部楼层
用hashtable传参可以么……
回复

使用道具 举报

发表于 2010-3-13 13:51:32 | 显示全部楼层
我说,jass支持运算符重载????orzmax

比较可行的方法是printf("%s,%f,%c","a,b,c")这种,采用一个栈,SaveValueStr("a","string"),LoadValueDouble("b")之类的
回复

使用道具 举报

 楼主| 发表于 2010-3-13 18:06:41 | 显示全部楼层

回 9楼(小药) 的帖子

思路就是这样的

不过如果用函数的话,输入过于复杂,就想eff说的,直接连接就可以了   

不用多次一举

这也正是为什么考虑用操作符重载

如果单纯实现,如小药所说,就是自己构造堆栈,模拟参数亚栈,这当然是可以的

但根本目的是为了写代码简便,否则,写了也是徒劳无用
回复

使用道具 举报

发表于 2010-3-13 18:54:00 | 显示全部楼层
没必要想了。。。。想点别的更有意思
回复

使用道具 举报

 楼主| 发表于 2010-3-13 23:14:29 | 显示全部楼层

回 8楼(zhuzeitou) 的帖子

应该可以实现
哎  不管怎样  不用操作符重载  用函数实现的话  
用起来都很繁琐

jass不支持可变参数啊 不支持啊 不支持啊!

不想了。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-24 21:55 , Processed in 0.089387 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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