Tag: variadic functions

什么是x86_64 va_list结构的格式?

任何人都可以参考x86_64 ABI(在Linux上使用的)中的va_list的表示? 我试图debugging一些代码堆栈或参数看起来腐败,这将有助于理解我应该看到什么…

为所有传递给可变参数或可变参数模板函数的参数指定一个types,使用数组,向量,结构体等?

我正在创build一个函数(可能是成员函数,不是那么重要,也许它是这样做的),它需要接受未知数量的参数,但是我希望所有的参数都是相同的types。 我知道我可以通过一个数组或向量,但我希望能够直接接受参数的列表,没有额外的结构,甚至额外的括号。 它看起来不像variadic函数本身是types安全的,我不知道如何去做这个w / variadic模板函数。 这里基本上是我的目标(更可能不正确的代码,完全不是为了获得龙列表,哈哈): //typedef for dragon_list_t up here somewhere. enum Maiden { Eunice , Beatrice , Una_Brow , Helga , Aida }; dragon_list_t make_dragon_list(Maiden…) { //here be dragons } 要么 template<Maiden… Maidens> dragon_list_t make_dragon_list(Maidens…) { //here be dragons } 用法 dragon_list_t dragons_to_slay = make_dragon_list(Maiden.Eunice, Maiden.Helga, Maiden.Aida) ; 试了几件与上面类似的东西,没有骰子。 build议? 我可能做出的明显疏忽? 我知道这样做可能不是一个大问题: dragon_list_t […]

Python,可变长度位置参数之后的默认关键字参数

我以为我可以在Python 2中的函数调用中使用可变长度位置参数后使用命名参数,但是当我导入python类时,我得到一个SyntaxError 。 我正在用下面的“get”方法编写,例如: class Foo(object): def __init__(self): print "You have created a Foo." def get(self, *args, raw=False, vars=None): print len(args) print raw print vars 该错误看起来像: def get(self, *args, raw=False, vars=None): ^ SyntaxError: invalid syntax 我想能够以几种方式调用该方法: f = Foo() f.get(arg1, arg2) f.get(arg1, raw=True) f.get(arg1, arg2, raw=True, vars=something) 等等

区别fn(String … args)vs fn(String args)

什么是这个语法有用的: function(String… args) 这和写作一样吗? function(String[] args) 只有在调用这个方法时才有区别,还是还有其他的特性呢?

为什么printf()将浮点数提升为double?

从以前的问题来看: 如果你试图传递一个float到printf ,它会在printf收到之前被提升为double printf()是一个可变的函数吗? 那么一个可变参数在传递之前是否会提升float参数呢?

你如何从Swift中调用Objective-C的可变参数?

假设我在Objective-c中有一个类,像这样的静态方法: + (NSError *)executeUpdateQuery:(NSString *)query, …; 我如何从Swift中调用? 自动完成不能识别它,编译器不满意: MyClassName.executeUpdateQuery("") 抱怨'MyClassName.Type没有名为executeUpdateQuery的成员'

在C中使用可变参数的一个例子

在这里,我find了一个如何在C中使用可变参数的例子。 #include <stdarg.h> double average(int count, …) { va_list ap; int j; double tot = 0; va_start(ap, count); //Requires the last fixed parameter (to get the address) for(j=0; j<count; j++) tot+=va_arg(ap, double); //Requires the type to cast to. Increments ap to the next argument. va_end(ap); return tot/count; } 我只能在一定程度上理解这个例子。 我不清楚为什么我们使用va_start(ap, count); 。 据我所知,以这种方式,我们设置迭代器的第一个元素。 但是为什么默认情况下它不是开始的? 我不清楚为什么我们需要把count作为一个论点。 […]

可变参数和“…”的论点

考虑方法声明: String.format(String, Object …) Object …参数只是一个Object数组的引用。 有没有办法使用这个方法引用一个实际的Object数组? 如果我将一个Object数组传递给…参数 – 将得到的参数值是一个二维数组 – 因为Object[]本身就是一个Object : Object[] params = ….; // Make the array (for example based on user-input) String s = String.format("%S has %.2f euros", params); 因此,数组的第一个组件(在String.format方法中使用)将是一个数组,他将生成: [class.getName() + "@" + Integer.toHexString(hashCode())] 然后由于数组大小为1而出现错误。 我希望我解释得很好。 可能很多语法错误(14岁和荷兰语),所以原谅我。 大胆的顺序是真正的问题。 这是第二个问题: 数组/参数是否有名字?

如何将可变数量的parameter passing给printf / sprintf

我有一个类包含一个“错误”函数,将格式化一些文本。 我想接受可变数量的参数,然后使用printf格式化它们。 例: class MyClass { public: void Error(const char* format, …); }; Error方法应该在参数中调用printf / sprintf来格式化,然后用它做些什么。 我不想自己编写所有的格式,所以试图找出如何使用现有的格式是有意义的。

尾随返回types使用带有可变参数模板函数的decltype

我想写一个简单的加法器(笑),加起来每个参数,并返回与适当types的总和。 目前,我有这样的: #include <iostream> using namespace std; template <class T> T sum(const T& in) { return in; } template <class T, class… P> auto sum(const T& t, const P&… p) -> decltype(t + sum(p…)) { return t + sum(p…); } int main() { cout << sum(5, 10.0, 22.2) << endl; } 在GCC 4.5.1上,这对于2个参数来说似乎工作得很好,例如sum(2,5.5)返回7.5。 然而,比这更多的争论,我得到错误sum()是根本没有定义。 如果我这样宣布sum(): […]