variadic-functions相关内容
我正在尝试使用一种方法编写服务器类,该方法将函数作为参数并将值(在服务器类中生成)传递给在线程内运行的函数. 以下只是一个例子来说明我正在尝试做的事情.我的目标是让 Server::runFunctionInThread 足够通用,适用于不同类的方法以及不属于任何类的函数.这是可能的事情吗? #include #include #include #define __PRETT
..
Remy 发布了一个很好的解决方案,可以将具有任意数量参数的任何函数传递给 std::线程,这里.我想知道它如何用于类成员函数. #include #include #include #define __PRETTY_FUNCTION__ __FUNCSIG__std::mutex my_mutex;模板void runFunctionInThread(Fu
..
C++ 新手这里:我想创建一个模板类来创建不同数据类型和 d 维度的张量,其中 d 由形状指定.例如,形状为 (2, 3, 5) 的张量有 3 个维度,包含 24 个元素.我使用一维向量存储所有数据元素,并希望使用形状信息访问元素以查找元素. 我想覆盖 () 操作符来访问元素.由于维度可能会有所不同,() 运算符的输入参数数量也会有所不同.从技术上讲,我可以使用向量作为输入参数,但 C++
..
我想创建一个 C 函数,它返回一个元组列表、一个字典列表,或者更好的是,一个我在另一个 python 模块中定义的类的对象列表. 关于 C API(«The Python/C API»)的文档提到要构建一个复杂的对象,我需要调用 Py_BuildValue 它使用可变数量的参数或 Py_VaBuildValue 使用 va_list 参数. 由于 C 不能用可变数量的参数动态调用,所以
..
在 C 中,在 stdarg.h 库下,函数或过程可以接受变量参数,并且通常参数列表前面是要跟随的参数数量的计数.是否可以验证用户的参数计数? 我怀疑这一定是可能的,因为 printf() 是一个可变参数函数,如果程序员在格式字符串中的标签数量与提供的参数数量之间存在不匹配,则会发生运行时错误.因此,似乎 printf 有某种方法可以检测提供的参数数量. 解决方案 C 标准没有为此提
..
我不确定正确的名称是什么,到目前为止我理解使用可变参数模板参数的概念(例如,与 std::initializer_list 相比). 所以让我们假设有任意数量的类 k 和任意数量的参数 i 依赖于每个类 k 构造函数. 我知道我可以使用可变参数模板构造任何 k 类: template void make_class(Args... args){汽车 k = T(args...);}
..
在 Effective Java 中,J. Bloch 提到对原始类型使用可变参数方法是不安全的.准确地说,Arrays.asList(1, 2, 4) 具有返回类型 List ,这听起来很合理.现在我试图自己重现这种行为,但不能: 我的问题是为什么类型推导出为 List 而不是 List 正如他所说的那样?这是否意味着,在 Java 8 中,关于可变参数的问题不再相关,如果我们不太关心性能
..
最近我想实现一个 printf 包装器.经过一番搜索,我发现 vprintf 非常适合这种需求: void my_printf(const char *fmt, ...){va_list 参数;va_start(args, fmt);vprintf(fmt, args);va_end(args);} 但是是否有可能为 printf 或任何其他类似函数实现这样的包装器,而不是 va_list?
..
我正在寻找一种方法,给定一个函数的签名,将它的 args 和 kwargs 规范化.也就是说,任何已经在函数签名中传入的 kwargs 都应该转换为 args. 例如: def myfunc(a, b=0, c=0, **kwargs):经过def规范化(func, *args, **kwargs):东西 = 检查.签名(功能)# 在这里用 args/kwargs 做一些事情返回 new_
..
我有一个接受 3 个参数的函数.其他函数的向量、void* 和任意参数列表.该函数旨在将其 void* 和任意参数列表传递给列表中的每个函数,函数将自行处理这些参数.这是我想要的一个例子: typedef void (*fptr)(const void* userdata, ...);void execute_all(vector funcs, void* userdata, ...
..
http://php.net/manual/en/function.array-push.php 清楚地显示了函数的签名,可变参数是完全可选的: int array_push ( array &$array [, 混合 $... ] ) 我认为,当将 array_push 与 splat 运算符一起使用时,非常希望它接受空的可变参数,例如允许这样的代码: 出于这个确切原因,许多语言(例如
..
PHP 函数 array_map(...) 期望回调作为第一个参数(或 null 对于 创建数组数组) 和可变数量的数组参数,例如: $foo =>array_map(null, $bar, $buz); 现在我有一个案例,我需要将可变数量的数组传递给 array_map(...).我无法对此进行硬编码,因为 array_map(...) 的输入数组是动态生成的. function perf
..
Shell-monad 支持可变参数,但是我找不到将此类参数列表传递给追加的方法.也许可以使用该库中存在的函数构造来解决,但我想问一下一般问题. 我模糊地理解“varargs"机制通过函数组合实现,通过类型类推断终止递归. 以该库为例,我想知道是否可以将参数视为“一流";比如给一个变量赋值两个参数. 这是一个(不正确的)示例,显示了我的意图. Prelude Control.M
..
有没有什么技巧可以获取传入参数的类型而不显式声明字符串中的类型作为参数之一? 补充一下刚才的帖子,基本上我想做的是 如果是A类型 调用函数A else if 是类型 B 调用函数B. 可变参数模板可以解决这个问题吗? 谢谢. 解决方案 一个可变参数模板肯定能解决这个问题: #include void function_a(int a) { pri
..
我在玩一些带有可变参数的函数,并决定制作一个函数来创建带有参数的向量.我创建 int 向量的函数有效... vectormakeIntVector(int numArgs, ...) {va_list 列表指针;va_start(listPointer, numArgs);向量制作;for(int a = 0; a 但不是我创建 string 向量的函数: vectormakeString
..
这是我的最小示例: #include #include #include void print_strings_and_lengths(int count, ...){va_list ap;/* 打印字符串 */va_start(AP,计数);for (int i = 0; i
..
我有问题.我尝试制作自定义 printf() 但是当我编译这段代码时,输出似乎不像预测的那样. #include #include 无效打印(字符*,...);int main(){char str[12]="世界";字符 c='A';国际我= 100;print("你好 %s %c", str, c);}无效打印(字符*c,...){字符 *s;va_list lst;va_start(l
..
根据 this answer 传递给可变参数函数的数字常量总是被视为 int 如果它们合二为一.这让我想知道为什么下面的代码同时适用于 int 和 long long.考虑以下函数调用: testfunc(4, 1000, 1001, 1002, 1003); testfunc 看起来像这样: void testfunc(int n, ...){国际 k;va_list 标记;va_star
..
我有很多使用 C 风格变量参数的代码.代码在可变长度函数调用的最后传入一个名为 end 的变量.而且.... 代码还有一个枚举器,叫做end.到目前为止,它们还没有发生冲突(编译器错误说它有一个模棱两可的定义:它不会告诉我神秘的第二个“结束"在哪里定义),直到我更改为 VC 10.0 编译器(VS 2010). 那么 end 是某种保留关键字,特别是在变量 args 中使用吗?我对他们知之甚
..
在一个带有可变参数的函数中,我们用函数 va_start() 初始化一个 va_list 类型的对象,'ap' 为: void va_start(va_list ap, parmN); 我不明白 1.什么类型的对象可以作为parMN(最后一个已知参数)传递.我已经完成了传递整数、带有格式说明符的字符串、结构等的示例. 2. parMN如何描述以下可选参数. 解决方案 C 标
..