我试图设计一个能够接受任意数量返回不同类型的函数指针的函数。我怎样才能编译?
#include <string>
template<typename T, typename U>
void g(T(*f1)(void) -> T, U(*f2)(void) -> U) {
}
template<typename ...T>
void h(T(*f)(void) -> T...) {
}
int main(int argc, char** argv) {
g(
+[]() -> int { return 123; },
+[]() -> std::string { return "321"; }
);
h(
+[]() -> int { return 123; },
+[]() -> std::string { return "321"; }
);
}
我完全有可能在这里真的很蠢。是参数扩展我做错了还是其他什么?
答案 0 :(得分:1)
g
和f
声明中不需要尾随返回类型,...
位置错误。
修正版:
#include <string>
template<typename T, typename U>
void g(T(*f1)(void), U(*f2)(void)) {
}
template<typename ...T>
void h(T(*...f)(void)) {
}
int main(int argc, char** argv) {
g(
+[]() -> int { return 123; },
+[]() -> std::string { return "321"; }
);
h(
+[]() -> int { return 123; },
+[]() -> std::string { return "321"; }
);
}