标签: variadic

Cocoa - 从另一个variadic方法调用一个可变方法(NSString stringWithFormat调用)

我有一个问题,[NSString strigWithFormat:format]因为它返回一个id,我有很多代码,我将NSString var更改为其他个人类型.但编译器并没有阻止我将NSString设置到另一种类型的对象的地方.

所以我写的NSString的类别和我goind来代替我的所有呼叫stringWithFormat至myStringWithFormat.

代码是:

@interface NSString (NSStringPerso)
+ (NSString*) myStringWithFormat:(NSString *)format;
@end



@implementation NSString (NSStringPerso)
+ (NSString*) myStringWithFormat:(NSString *)format {
    return (NSString*)[NSString stringWithFormat:format];
}
@end
Run Code Online (Sandbox Code Playgroud)

编译器告诉我"格式不是字符串文字而没有格式参数".

你有没有办法让这项工作成功?

cocoa variadic compiler-warnings nsstring categories

3
推荐指数
1
解决办法
733
查看次数

这种语法合法吗?

当我取消注释下面的main()中的行时,Visual Studio 2015将无法编译(否则代码编译).

#include <iostream>
#include <type_traits>

template <typename Output, std::size_t... Input> struct RemoveLastHelper;

template <template <std::size_t...> class Z, std::size_t... Accumulated, std::size_t First, std::size_t... Rest>
struct RemoveLastHelper<Z<Accumulated...>, First, Rest...> :
    RemoveLastHelper<Z<Accumulated..., First>, Rest...> {};

template <template <std::size_t...> class Z, std::size_t... Accumulated, std::size_t Last>
struct RemoveLastHelper<Z<Accumulated...>, Last> {
    using type = Z<Accumulated...>;
};

template <template <std::size_t...> class Z, std::size_t... Is>
using RemoveLast = RemoveLastHelper<Z<>, Is...>;

struct Base {
    virtual ~Base() = default;
    virtual void foo() const = 0;
};

template <std::size_t... …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates variadic c++11

3
推荐指数
1
解决办法
149
查看次数

Push_back 可变参数函数参数转换为向量?

我正在尝试 push_back 可变参数函数的参数,如下所示,但编译器说存在类型不匹配(由于参数是通用类型,而向量是 int)。我应该怎么做才能使参数兼容?

vector<int> x;
template<typename... Rest>
void foo(Rest... rest) {
    x.push_back(rest...);
}
Run Code Online (Sandbox Code Playgroud)

c++ debugging variadic variadic-functions

3
推荐指数
1
解决办法
1300
查看次数

Kotlin 泛型类重载?

我想创建一些类型参数可变数量的类。

例如,一个元组类:

class Tuple<T1>{
    //blah 
}
class Tuple<T1,T2>{
    //blah blah 
}
class Tuple<T1,T2,T3>{
    //blah blah blah
}
Run Code Online (Sandbox Code Playgroud)

但它显示“重新声明”错误,有什么建议吗?

generics overloading variadic kotlin

3
推荐指数
1
解决办法
352
查看次数

如何在golang中解析多个返回

我有一个go函数,它返回两个整数值.以下是功能

func temp() (int, int){
 return 1,1
}
Run Code Online (Sandbox Code Playgroud)

是否可以将temp函数直接放入a Println并使用字符串格式打印输出,如下所示

fmt.Println("first= %d and second = %d", temp() ) // This doesn't work
Run Code Online (Sandbox Code Playgroud)

在Python中,我能够执行以下操作

def func():
    return 1,1
print("{0}={1}".format(*func())
>> '1=2'
Run Code Online (Sandbox Code Playgroud)

我可以在golang做类似的东西吗?

python return-value variadic go multiple-return-values

3
推荐指数
2
解决办法
2329
查看次数

swift 结合声明式语法

Swift Combine 的声明式语法对我来说看起来很奇怪,而且似乎有很多事情是不可见的。

例如,以下代码示例在 Xcode Playground 中构建和运行:

[1, 2, 3]

.publisher
.map({ (val) in
        return val * 3
    })

.sink(receiveCompletion: { completion in
  switch completion {
  case .failure(let error):
    print("Something went wrong: \(error)")
  case .finished:
    print("Received Completion")
  }
}, receiveValue: { value in
  print("Received value \(value)")
})
Run Code Online (Sandbox Code Playgroud)

我看到我假设的是一个用 [1, 2, 3] 创建的数组文字实例。我猜它是一个数组文字,但我不习惯看到它“声明”而不将它分配给变量名或常量或使用 _=。

我在 .publisher 之后故意添加了一个新行。Xcode 是否忽略了空格和换行符?

由于这种风格,或者我对视觉解析这种风格的新鲜感,我错误地认为“,receiveValue:”是一个可变参数或一些新语法,但后来意识到它实际上是 .sink(...) 的参数。

variadic swift combine

3
推荐指数
1
解决办法
632
查看次数

...(省略号)作为函数原型中唯一的函数参数在 C++ 中意味着什么?

I\xc2\xb4ve 遇到了一个函数声明,例如:

\n\n
int vsa_d(...);\n
Run Code Online (Sandbox Code Playgroud)\n\n

和...一个且唯一的参数。

\n\n

我知道通过省略号,我们可以指代多个对象,但是指代的是什么?...这里指的是什么呢?

\n\n
    \n
  • 这意味着什么以及它的目的是什么?

  • \n
  • 到什么...编译器评估

  • \n
  • 在调用函数时,省略号也可以用作函数参数吗?

  • \n
\n\n
\n\n

我\xc2\xb4ve在“注释”下找到了https://en.cppreference.com/w/cpp/language/variadic_arguments:

\n\n
\n

在C编程语言中,省略号参数之前必须至少出现一个命名参数,因此 printz(...); 无效。在 C++ 中,即使传递给此类函数的参数不可访问,也允许这种形式,并且通常用作 SFINAE 中的后备重载,利用重载决策中省略号转换的最低优先级。

\n
\n\n

因此,它应用于“ SFINAE”中的“后备过载”之类的情况”之类的情况。

\n\n

这意味着什么?

\n

c++ function ellipsis variadic variadic-functions

3
推荐指数
1
解决办法
1301
查看次数

是否可以获取可变参数函数的参数数量?

我一直在研究如何使用可变数量的参数声明函数或类成员,并遇到了可变参数函数,但是我想知道是否有某种方法可以访问传递给函数的参数数量,而不必通过正如大多数文档所介绍的那样,它直接作为第一个参数。我也知道我可以使用可变参数模板 或std::initializer_list,但由于我希望传递相同类型的多个参数,这些参数似乎过于通用和/或语法复杂。

#include <cstdarg>

bool func(int args...) {
    va_list list;
    va_start(list, args);   
    int val = args;
    while(val >=0) {
        std::cout << val << std::endl;
        val = va_arg(list, int);
    }
    return true;
}

bool other_func(int c, int args...) {
    va_list list;
    va_start(list, args);   
    int val = args;
    for (int i = 0; i<c; i++) {
        std::cout << val << std::endl;
        val = va_arg(list, int);
    }
    return true;
}

int main(int argc, char const …
Run Code Online (Sandbox Code Playgroud)

c++ variadic c++11

3
推荐指数
1
解决办法
448
查看次数

如何在 C++ 中分配可变参数

我正在尝试创建一个函数,使用可变参数/变量输入参数将默认值或输入值分配给多个(标量)参数,如下所示:

void set_params(const vector<double> &input, int n, ...) {  
  va_list args;
  va_start (args, n);
  for (int i = 0; i < n; i++) {
    if (i < input.size()) {
      va_arg(args, int) = input[i];
    }
  }
  va_end(args);
}

int a = 1, b = 2, c = 3;
set_params({10, 20}, 3, a, b, c);
Run Code Online (Sandbox Code Playgroud)

但是,我在分配时遇到错误va_arg(args, int) = input[i]。是否可以以某种方式使用变量参数进行赋值,或者是否有更好的方法来实现这一点?

c++ variadic variable-assignment

3
推荐指数
1
解决办法
2741
查看次数

当参数数量多于格式中指定的参数时,vsprintf() 不会打印警告

我尝试使用简单的日志记录机制在创建日志时创建错误检查。我观察到,与 printf 相比,可以使用vfprintf(),它在编译时不会打印任何警告,传递给 format 的参数太多(参见下面的示例)。(我不希望他们有相同的行为,但我仍然期望类似的行为)。关于这个问题,即使在编译时已知可变参数的数量。在编译时是否可以通过任何方式进行检查?\n下面,我准备了一个代码示例,在编译时编译器将打印有关 printf 的警告,并且工作vfprintf()正常,没有任何错误。也许第二个可变参数被忽略了?我读过这个人,但找不到任何有用的信息。

\n
#include <stdarg.h>\n#include <stdio.h>\n\nvoid check_printf_usage(char *fmt, ...)\n{\n    va_list ap;\n    \n    va_start(ap, fmt);\n    vfprintf(stdout, fmt, ap);\n    va_end(ap);\n}\n\nint main()\n{\n    int x = 1;\n    int y = 2;\n    printf("test nr.1 %i\\n", x, y); // works as expected, prints warning\n    check_printf_usage("test nr.2 %i\\n", x, y); // does not print any warning\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这是编译输出+程序输出:

\n
#include <stdarg.h>\n#include <stdio.h>\n\nvoid check_printf_usage(char *fmt, ...)\n{\n    va_list ap;\n    \n    va_start(ap, fmt);\n    vfprintf(stdout, fmt, ap);\n    va_end(ap);\n}\n\nint main()\n{\n    int …
Run Code Online (Sandbox Code Playgroud)

c printf c99 variadic variadic-functions

3
推荐指数
1
解决办法
63
查看次数