【发布时间】:2015-04-28 07:14:28
【问题描述】:
在给定重载集和参数列表的情况下,是否可以确定重载决策将选择的候选函数类型?例如,给定:
char* f(int);
int f(char*);
我希望能够写出类似的东西:
overload<f, short>::type x;
声明x 类型的变量char* (*)(int)。
这可能吗?我的第一直觉是这样写:
template<typename... Args>
struct overload {
template<typename Ret>
static auto deduce(Ret (*fptr)(Args...)) -> decltype(fptr);
};
...但这不能处理非精确匹配(即decltype(overload<int>::deduce(f)) 有效,但decltype(overload<short>::deduce(f)) 无效)。
【问题讨论】:
-
我不认为这在C++中可以做到,你可以得到返回类型,但不能得到参数的类型。
标签: c++ templates c++11 template-meta-programming overload-resolution