相关疑难解决方法(0)

在C中转发可变参数函数的调用

在C中,是否可以转发可变参数函数的调用?如,

int my_printf(char *fmt, ...) {
    fprintf(stderr, "Calling printf with fmt %s", fmt);
    return SOMEHOW_INVOKE_LIBC_PRINTF;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,以上述方式转发调用显然不是必需的(因为你可以用其他方式记录调用,或者使用vfprintf),但是我正在处理的代码库要求包装器做一些实际的工作,并且没有没有(并且不能添加)类似于vfprintf的辅助函数.

[更新:基于迄今为止提供的答案,似乎存在一些混淆.用另一种方式表达问题:通常,你可以包装一些任意的可变参数函数而不修改该函数的定义.

c variadic

176
推荐指数
6
解决办法
6万
查看次数

任何元编程方式为不同数量的模板参数生成重载?

我正在尝试创建一组函数模板,可以使用不同类型和数量的参数,如下所示:

template <T0>
void call(T0 arg0);

template <T0, T1>
void call(T0 arg0, T1 arg1);

template <T0, T1, T2>
void call(T0 arg0, T1 arg1, T2 arg2);

template <T0, T1, T2, T3>
void call(T0 arg0, T1 arg1, T2 arg2, T3 arg3);

template <T0, T1, T2, T3, T4>
void call(T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4);

[...]
Run Code Online (Sandbox Code Playgroud)

函数内的参数都被视为相同(作为单参数模板函数的参数).这是一个库,所以我可以接受额外的努力,如果这意味着更少的工作量或更愉快的库用户界面.

我不得不为不同的项目多次这样做,而且我非常厌倦必须手动手动编写所有这些项目.当我事先不知道使用该库的项目所需的最大参数数量时,情况会变得更糟.

在我开始编写Python脚本以生成所有重载之前,是否有一些元编程方法让编译器为我做这件事?

c++ templates metaprogramming

7
推荐指数
2
解决办法
927
查看次数

标签 统计

c ×1

c++ ×1

metaprogramming ×1

templates ×1

variadic ×1