游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2456|回复: 4

问2个可变参数的函数编写问题。。。

[复制链接]

19

主题

52

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2010-5-7 10:37:00 | 显示全部楼层 |阅读模式

首先第一个:
int fun1(int start, ...)
{
// 可以根据start来取得其后传入的参数
}
int fun2(...)
{
// 问:这个时候函数只有...,没有起始参数,要如何取得各个参数
}

第二个问题:
假如我想这样写fun2
int fun2(...)
{
return fun1(0, ...); // 我想让fun2中的可边参数...传入fun1,这里我用...号代替,编译实际上通不过,要如何写?
}


请大家赐教啊

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2010-5-7 20:46:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

2

主题

50

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2010-5-17 21:55:00 | 显示全部楼层

Re:问2个可变参数的函数编写问题。。。

int fun2(...)
{
    return 0;
}

int fun1(int start, ...)
{
    fun2((char*)&start + sizeof(int));
    return 0;
}

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2010-5-19 16:25:00 | 显示全部楼层

Re:问2个可变参数的函数编写问题。。。

f(start,...) --> 就这样写即可。
start 是你的第一个参数,而随后的“...”可以是0个参数。
(如果要支持0个参数则应当提供另一个重载函数 f(void); )

我的一段代码是这样的:

        Matrix(T first, ...)
        {
                va_list args;
                va_start(args, first);
                m[0][0] = first;
                for (int i=1; i<rows*cols+1; i++)
                        m[i/cols][i%cols] = va_arg(args, T);
                va_end(args);
        }
可以传递 1~n个参数。

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2010-6-21 23:02:00 | 显示全部楼层

Re:问2个可变参数的函数编写问题。。。

第一个fun1如楼上所说.
第二个,呵呵,还是可以像楼上说的那样.
但是要注意,既然是变参,fun2必须知道到底传入的多少个参数.像fun1就可以把第一个参数作为参数的总个数.
或者像C库的printf,根据第一个参数"%s%d......"来确定后面到底有多少个参数,是什么类型的.
不然这样设计出的函数太模糊.
我调用fun2(10,20)可以,调用fun2(10,20,30),也可以,但是你却不知道会有多少个参数,也就是说fun2里面没有办法处理,当然你可以约定fun2的参数,但是至少在源代码级别是不能很好阅读的.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 17:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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