基于参数类型推导重载函数的函数类型

时间:2014-03-18 21:48:59

标签: c++ templates c++11 overloading overload-resolution

假设有一个重载函数:

void overloaded(int) {}
void overloaded(void) {}

因为我不想(或可以)写下完整的功能签名(如void(int)void(void)),我需要仅使用函数名称({{1})来获取此签名})和 其参数类型(overloadedint)。

我尝试了几种使用void和朋友的方法,但遗憾的是没有成功。

所以,简而言之,我需要这样的东西:

decltype

1 个答案:

答案 0 :(得分:2)

如果您允许在类型函数中使用名称overloaded,则会执行以下操作:

template<typename... A>
using sig = decltype(overloaded(std::declval<A>()...))(A...);

sig<int>提供void(int)sig<>提供void()

这只是模板别名中tclamb解决方案的包装。