我想从方法类型中剥离一个类,以便剩下一个可以使用的函数类型。
periodicitySelection
具有伪造的行为,显示了由于呼叫stripClass
而导致的需求。
其他几行显示了我的一般理解。
stripClass(decltype(&A::B))
如何在保留返回类型和参数的同时从方法中剥离类以获取函数指针。
答案 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;