如果有可能如何使用可变参数元组作为函数中的参数以及如何初始化它,我有点困惑.
template <typename T, Arg ...>
void foo (int a, std::tuple<T, sizeof(Arg)> TupleTest);
...
foo(TupleTest(2, "TEST", 5.5));
Run Code Online (Sandbox Code Playgroud)
如何使用c ++ 0x实现?
我需要一个函数来实现以下功能:
template<typename T, std::size_t SIZE_L, std::size_t ...SIZE_R>
std::array<T, SIZE_L> concat(const std::array<T, SIZE_R...>&);
Run Code Online (Sandbox Code Playgroud)
这应该将 RHS 上所有传递的数组连接成一个数组。SIZE_R 的总和应该与 SIZE_L 相同——如果可能的话,不需要手动指定 SIZE_L。
此数组的元素类型将始终为 double。
我希望在 C 中创建一个可变参数函数,允许执行如下操作:
Send({1,2,3,4,5});
Send({4,5,2});
Send({1,1,1,1,1,1,1,1,1,1,1,1,1});
Run Code Online (Sandbox Code Playgroud)
请注意,没有长度输入,并且数组是内联放置的,并且没有任何设置或创建任何变量
目前我正在使用正式的可变参数选项,如下所示(来自此处的示例),这非常方便,但也容易出现有时难以调试的错误,例如忘记放置num_args(仍然编译)、放置错误数量的元素等。
int sum(int num_args, ...) {
int val = 0;
va_list ap;
int i;
va_start(ap, num_args);
for(i = 0; i < num_args; i++) {
val += va_arg(ap, int);
}
va_end(ap);
return val;
}
Run Code Online (Sandbox Code Playgroud) 不是What is std::invoke in c++?的重复项 。该问题专门询问了这一唯一的功能。这个问题询问一个概念,无需该功能即可 100% 解决,并且有多种替代解决方案,其中只有一些甚至使用该功能。
在 Python 中,您可以将函数名称和参数列表传递给外部函数,该外部函数调用内部函数并将这些参数传递给它,如下所示:
def perform(fun, *args):
fun(*args)
def action1(args):
# something
def action2(args):
# something
perform(action1)
perform(action2, p)
perform(action3, p, r)
Run Code Online (Sandbox Code Playgroud)
我如何在 C++ 中做到这一点?
我正在摆弄 C 中的可变参数函数来了解它们是如何工作的,并且正在尝试构建一个简单的“打印行”函数,而不需要手动计算行数。我通过将函数包装在一个宏中来实现此目的,该宏将空指针添加到char *参数列表的末尾,以便该函数可以逐行打印,直到找到空参数。
我知道我已经避免了一些常见的陷阱,例如忘记在参数列表中强制转换空指针,但无论出于何种原因,该代码仍然无法正常工作。使用任意数量的参数调用该函数都会正确打印它们,然后无法检测空值,打印一堆垃圾数据,然后崩溃。
int printline(const char *str) {
printf("%s\n", str);
}
#define printlines(...) _comments(__VA_ARGS__, (char*)0)
int _printlines(char* first, ...) {
if (first) {
printline(first);
va_list ptr;
va_start(ptr, first);
char *next;
do {
char *next = va_arg(ptr, char *);
if (next) {
printline(next);
}
} while(next);
va_end(ptr);
}
}
int main() {
printlines("hi");
//prints 'hi', then prints garbage data and crashes
printlines("how", "are", "you");
//prints 'how', 'are', and 'you', then prints garbage data and crashes
_printlines("help", (char …Run Code Online (Sandbox Code Playgroud) 根据 Apple 的说法:“一个函数可以有多个可变参数。可变参数之后的第一个参数必须有一个参数标签。”
但是当我尝试做同样的事情时,它给了我以下错误。“只允许使用一个可变参数‘...’”请参阅附件截图
更正: 实际上我使用的是旧版本的 XCode,它不支持多个可变参数。