假设有一个重载函数:
void overloaded(int) {}
void overloaded(void) {}
因为我不想(或可以)写下完整的功能签名(如void(int)
或void(void)
),我需要仅使用函数名称({{1})来获取此签名})和
其参数类型(overloaded
或int
)。
我尝试了几种使用void
和朋友的方法,但遗憾的是没有成功。
所以,简而言之,我需要这样的东西:
decltype
答案 0 :(得分:2)
如果您允许在类型函数中使用名称overloaded
,则会执行以下操作:
template<typename... A>
using sig = decltype(overloaded(std::declval<A>()...))(A...);
sig<int>
提供void(int)
,sig<>
提供void()
。
这只是模板别名中tclamb解决方案的包装。