标签: variadic-functions

在python中传递命名变量参数

说我有以下方法:

def methodA(arg, **kwargs):
    pass

def methodB(arg, *args, **kwargs):
    pass
Run Code Online (Sandbox Code Playgroud)

在methodA中,我希望调用methodB,传递kwargs.但是,似乎如果我定义methodA如下,第二个参数将作为位置而不是命名变量参数传递.

def methodA(arg, **kwargs):
    methodB("argvalue", kwargs)
Run Code Online (Sandbox Code Playgroud)

如何确保methodA中的**kwargs作为**kwargs传递给methodB?

python variadic-functions

12
推荐指数
1
解决办法
1万
查看次数

C中的变量参数,如何获取泛型类型的值?

我正在尝试使用带有泛型类型的C stdarg.h lib.int类型,是我的泛型类型>要理解它,请继续阅读.所以,我的问题是:

我有一个函数接受可变数量的参数.喜欢

void function (int paramN, ...);
Run Code Online (Sandbox Code Playgroud)

在我的程序中,没有办法知道,哪个是变量参数的类型,它可以是char,数组,int,short,函数点等...就像

function (paramN, "Hey, I'm a string", 1, function_pint, array, -1); // -1 is a sentinel.
Run Code Online (Sandbox Code Playgroud)

所以,我认为,一个int,是32位,在x86(32位)系统中,这将保存所有内存地址.所以,如果我用int得到所有参数,那就不会有问题了,例如,"嘿,我是一个字符串"这个字符串的地址,通常适合32位变量,所以,我只需要制作演员.

我是正确的?
我可以做吗?
注意:我不想让我的函数像printf(这个解决方案,在这种情况下不适合好吗?)

谢谢你的回答.
抱歉我的英语不好.

c variadic-functions

12
推荐指数
2
解决办法
1万
查看次数

PHP:我可以使用可变数量的参数声明一个抽象函数吗?

我希望能够在父类中声明一个具有未知数量参数的抽象函数:

abstract function doStuff(...);
Run Code Online (Sandbox Code Playgroud)

然后使用一组提示参数定义一个实现:

 /**
 * @param int $userID
 * @param int $serviceproviderID
 */
static function doStuff($userID, $serviceproviderID) {}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我得到的最佳方法是,

abstract function doStuff();

 /**
 * @param int $userID
 * @param int $serviceproviderID
 */
static function doStuff() {
    $args = func_get_args();
    ...
}
Run Code Online (Sandbox Code Playgroud)

但每次调用函数时,由于提示,我都会收到一堆"缺少参数"的警告.有没有更好的办法?

编辑:问题是错的,请不要浪费你的时间回答.以下是我正在寻找的东西,似乎没有任何警告.

abstract class Parent {
    abstract function doStuff();
}

/**
* @param type $arg1
* @param type $arg2
*/
class Child extends Parent {
    function doStuff($arg1, $arg2) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

php function variadic-functions abstract

12
推荐指数
2
解决办法
1万
查看次数

为什么varargs(Class <?extends Throwable> ... t)"unchecked or unsafe"操作?

好的,我正在调用一个带签名的方法,(Class<? extends Throwable>... exceptions)我在main方法中得到一个"File.java使用未经检查或不安全的操作"警告:

public class VarargsFun {
    public void onException(Class<? extends Throwable>... exceptions) { }

    public static void main(String[] args) {
        new VarargsFun().onException(IllegalArgumentException.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器是否应该能够看到IllegalArgumentException确实扩展了RuntimeException,Exception并且Throwable

我应该如何正确修改我的代码以摆脱这个警告?

我真的不想实例化我的例外......使用它似乎更好 .class

(不要用@SuppressWarnings任何一个!)

我正在使用java 7.感谢任何提示.

java generics exception variadic-functions compiler-warnings

12
推荐指数
2
解决办法
5185
查看次数

将varargs传递给printf

我想要一个辅助函数log,基本上执行以下操作:

log(file, "array has %d elements\n", 10);
// writes "2014-02-03 16:33:00 - array has 10 elements" to &file
Run Code Online (Sandbox Code Playgroud)

我有时间部分,我有文件写入部分.然而,问题是方法签名本身log- 我应该放什么?表示printf声明以...关键字结束,但我如何在我的函数中使用它?

void log(FILE *f, const char * format, ...) // how would I pass ... to fprintf?
Run Code Online (Sandbox Code Playgroud)

让我编辑这个包含更多信息.

我有一个const char * now ()返回"2014-02-03 16:33:00"形式的字符串.我想像这样传递另一个格式字符串.这两个陈述应该是等同的:

log(file, "array has %d elements\n", 10);
fprintf(file, "%s - array has %d elements\n", now(), 10);
Run Code Online (Sandbox Code Playgroud)

我知道这vfprintf可以让我通过va_list,但我怎么能把它now() …

c printf function variadic-functions

12
推荐指数
2
解决办法
2万
查看次数

Java Bug使用varargs的模糊方法?

我有一个类有两个这样的方法:

public class Dummy{
  public void doIt(String arg1, File arg2, Writer... ctx){
    // Do something very important...
  }

  public void doIt(String arg1, Writer... ctx){
    // Do something else...
  }

  public static void main(String[] args){
    new Dummy().doIt("Test", null);
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望,编译器会给出错误,因为方法调用是不明确的.而是调用第二种方法.

在我们的例子中,ambigous方法是从数据库方法和稍后添加的varargs生成的.现在我们不知道如何避免方法调用的问题,如示例中所示.

有没有其他人有这个问题,并有一个想法如何解决它?

java compiler-construction variadic-functions ambiguous

12
推荐指数
1
解决办法
402
查看次数

参数包未使用"..."展开

我有这个代码:

#include <iostream>
using namespace std;

int print(int i)
{
    cout << endl << i;
}

template<typename ...Args>
inline void pass(Args&&...args)
{

}

template<typename ...args>
inline void expand(args&&... a)
{
    print(a) ...; //this doesn't expand
    //pass( print(a)... ); this works
}

int main() {
    expand(1,2,3,4);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它抛出一个错误:

 In function 'void expand(args&& ...)':
error: expected ';' before '...' token
  print(a) ...;
           ^
parameter packs not expanded with '...':
  print(a) ...;
              ^
Run Code Online (Sandbox Code Playgroud)

为什么要使用这个pass()功能?

c++ variadic-functions variadic-templates c++14

12
推荐指数
2
解决办法
1万
查看次数

从构造函数参数的组合生成变量类型的对象

假设我有类型A,B有构造函数A(int a, double b, std::string c),B(double a, int b).

我知道如何定义一个实例化AB通过可变参数模板的函数.

有没有办法设计一个函数/宏/类型,对于一个类型T和一系列T构造函数参数的可能性向量,它为我提供了所有可能的对象?

例如,如果我使用这个神奇的构造,<A, {2, 5, 6}, {2.44, 3.14}, {"yes", "no"}>它应该提供对象:

A(2, 2.44, "yes")
A(2, 2.44, "no")
A(2, 3.14, "yes")
...
A(6, 3.14, "no")
Run Code Online (Sandbox Code Playgroud)

这同样适用于B任何其他类型,而不必重新设计魔法结构.

例如,这在Python中非常简单,但我不知道它是否可以在C++中使用.

c++ variadic-functions c++11

12
推荐指数
1
解决办法
284
查看次数

关于接口方法的@SafeVarargs

在这段代码中,

package com.example;

interface CollectorIF<T> {
    // @SafeVarargs         // Error: @SafeVarargs annotation cannot be applied to non-final instance method addAll
    void addAll(T... values);   
}

class Collector<T> implements CollectorIF<T> {

    @SafeVarargs
    public final void addAll(T... values) {
    }
}

class Component<T> {

    public void compute(T value) {
        Collector<T> col1 = new Collector<>();
        col1.addAll(value);   // No warning

        CollectorIF<T> col2 = new Collector<>();
        col2.addAll(value);   // Type safety: A generic array of T is created for a varargs parameter
    }
}
Run Code Online (Sandbox Code Playgroud)

Type safety: …

java generics variadic-functions

12
推荐指数
1
解决办法
1181
查看次数

将数组传递给php中的varargs函数

我有一个在PHP 7中定义的varargs类型方法

function selectAll(string $sql, ...$params) { }
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我已经有一个数组时,有时我想调用这个方法,我不能直接将数组变量传递给这个方法.

php variadic-functions php-7

12
推荐指数
1
解决办法
4127
查看次数