从通过decltype获得的方法类型中剥离类

时间:2019-02-20 10:21:38

标签: c++ types

我想从方法类型中剥离一个类,以便剩下一个可以使用的函数类型。

periodicitySelection具有伪造的行为,显示了由于呼叫stripClass而导致的需求。

其他几行显示了我的一般理解。

stripClass(decltype(&A::B))

如何在保留返回类型和参数的同时从方法中剥离类以获取函数指针。

2 个答案:

答案 0 :(得分:3)

您可以编写类型特征,也可以专门处理参数/结果类型或以不同方式处理合格方法:

template<typename x_PointerToMethod> class
t_SignatureExtractor;

template<typename x_Class, typename x_Returned, typename... x_Args> class
t_SignatureExtractor<x_Returned ( x_Class::* )(x_Args...)> final
{
    public: using
    t_ExtractedSignature = x_Returned (x_Args...);
};

template<auto x_p_method> using
t_ExtractedSignature = typename t_SignatureExtractor<decltype(x_p_method)>::t_ExtractedSignature;

...

t_ExtractedSignature<&A::B> * f{};

答案 1 :(得分:2)

实现任何成员指针的特征,因为无论它们是函数还是对象,其作用都相同:

template <class MemberPointer>
struct as_free_pointer;

template <class C, class T>
struct as_free_pointer<T C::*> {
    using type = T *;
};

template <class MemberPointer>
using as_free_pointer_t = typename as_free_pointer<MemberPointer>::type;