假设有一个重载函数:
void overloaded(int) {}
void overloaded(void) {}
因为我不想(或不能)写下完整的函数签名(如 void(int)
或 void(void)
)我需要得到此签名仅使用函数名称(重载
)和
它的参数类型(int
或 void
)。
我尝试了几种使用 decltype
和 friend 的方法,但不幸的是没有成功。
所以,简而言之,我需要这样的东西:
cout << typeid(
get_overload(overloaded,(int)0))::type /* where the magic happens */
.name() << endl;
最佳答案
如果您被允许使用名称 overloaded
在 type 函数中,这将执行:
template<typename... A>
using sig = decltype(overloaded(std::declval<A>()...))(A...);
sig<int>
给出 void(int)
, 和 sig<>
给出 void()
.
这只是模板别名中 tclamb 解决方案的包装。
关于c++ - 根据参数类型推断重载函数的函数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22491773/