std::function 使用 C 可变参数,而不是模板化变量参数

std::function with C variadic arguments, not templated variable arguments

我基本上想做以下事情:

typedef
std::function<int(const char* format, ...)> PrintfLikeFunction;

然而,这似乎不起作用。

这可能吗?在我的案例中,我确实需要将函数与可变参数匹配,以便我可以传入 printf.

另一个原因是,我想要

void doSomething(PrintfLikeFunction logger);

并且实现应该是分开的,因此这不能是模板函数。

std::function 无法做到这一点。

It's pretty much impossible to forward C-style variadic arguments directly,不知道实际传递了哪些参数。

根据具体情况,您可能只采用函数指针 - int(*)(const char*, ...),或者,如果需要类型擦除,请重新编写代码以使用采用 va_list 的变体。