2012-04-09 41 views
1

我熟悉va_arg列表。我想知道是否有通过后逗号如何检索整个va_list输入

abc("%d %d %d how are you",1,2,3); 

我想知道是否可以传递给一个字符串这整个呼叫而不喜欢

任何处理,我们可以获取价值的方式
string [1]="%d %d %d how are you",1,2,3; 

我不想做任何类型的处理,我只是想读取整个调用并将其存储在一个数组字符串中。

+0

嗯,也许检查vsnprintf。我认为有一个例子就像你想在我链接的页面里面做的事情。 http://msdn.microsoft.com/en-us/library/1kt27hek.aspx – Lefteris 2012-04-09 07:13:31

+0

@Lefteris我不想输出任何数据,我只是想完全存储它,因为我想在后来的阶段处理它 – hardyz009 2012-04-09 07:20:51

回答

1

尽我所能理解您的要求,但在标准C++ 03中是不可能的。最密切相关的C++的功能是预处理器宏参数字串,这将允许这样的事情:

#define ABC(X) do { remember_string_version(#X); abc X; } while (false) 

ABC(("%d %d %d how are you",1,2,3)); 

注意双括号 - 这组字符串和号码,以便它们匹配的一个参数“X”由ABC预期。

预处理字串是设施,让您保存的源代码片断一些作为一个字符串,同时还用它作为源代码....

+0

我不是确定操作系统想要保存源代码字符串,我相信操作系统想在运行时“记住”参数而不处理它们。 – littleadv 2012-04-09 07:23:30

+0

嗯,我认为应该解决我的目的,因为我只需要获取整个字符串,然后在过程。谢谢你的答案让我试试看,并使其工作:) – hardyz009 2012-04-09 07:25:33

+0

@Tony Delroy 做{remember_string_version(#X); abc X; } while(false)//如何使用这行代码 – hardyz009 2012-04-09 07:28:50

0

这是编译器的依赖性,虽然在理论上,你可以做在实践中,它很可能不便携。你可以在编译时通过宏,如@Tony提到的,但在运行时 - 使用va_arg。它基本上实现了你想要的,并且是由标准提供的工具,以便与这种依赖于编译器的功能接口。