确定重载成员函数的签名

时间:2013-02-01 15:37:42

标签: c++ template-meta-programming overloading function-signature

如果some_type使用成员函数f,则可以像这样确定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超载,这显然会失败。是否可以在f内确定some_type的所有现有重载的签名?

1 个答案:

答案 0 :(得分:0)

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

但是C ++中没有 reflection ,你无法查询类中存在同一函数的函数甚至重载。