我想写一个你这样称呼的函数:
f("a", 1, [](float a ) { … });
f("a", 1, "b", 2, [](float a, float b ) { … });
f("a", 1, "b", 2, "c", 3, [](float a, float b, float c) { … });
这项功能的作用并不重要。关键是f
的每对char * / integer参数对应于lambda函数的float参数。我得到了这个:
template <typename ...Args>
void f(Args... args, std::function<void(???)> cb);
如何声明仿函数类型以使其参数的基数与输入对的基数相匹配?
答案 0 :(得分:2)
当需要函数对象参数时,通常只允许函数接受任何类型,并让编译器在类型实际不匹配时自动发出错误。
template <typename... Args, typename F>
void f(const F& func, Args&&... args) { ... }
(请注意,我已将函数参数移到前面,因为可变参数部分将消耗所有参数。)