确定重载成员函数的签名

Determine signatures of overloaded member functions

本文关键字:函数 成员 重载      更新时间:2023-10-16

给定具有成员函数f some_type,可以像这样确定f的签名(并说让我们将其放在元组中):

template <typename R, typename T, typename... A>
std::tuple<R, A...> signature_of_impl(R (T::*)(A...));
template <typename T>
using signature_of_member_f = decltype(signature_of_impl(&T::f));
struct some_type
{
    int f(char, float);
};
using some_type_f_signature = signture_of_member_f<some_type>;

如果f过载,这显然会严重失败。是否可以确定some_type内所有现有f重载的签名?

您可以"询问"编译器特定函数的类型。

但是C++中没有反射,您无法查询类中存在哪些函数甚至同一函数的重载。