函数指针参数的可变参数模板参数推导

时间:2018-01-08 17:19:12

标签: c++11

我试图设计一个能够接受任意数量返回不同类型的函数指针的函数。我怎样才能编译?

#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"; }
  );
}

我完全有可能在这里真的很蠢。是参数扩展我做错了还是其他什么?

1 个答案:

答案 0 :(得分:1)

gf声明中不需要尾随返回类型,...位置错误。

修正版:

#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"; }
  );
}