3

Boost有is_member_function_pointer,但没有is_member_function_pointer_of,它会判断类型是否是另一个类的成员函数指针。所以,例如,

boost::is_member_function_pointer_of<void(ClassA::*)(), ClassA>::value == true
boost::is_member_function_pointer_of<void(ClassA::*)(), ClassB>::value == false

这可以写吗?

4

1 回答 1

2

指向成员函数类型的指针只是指向碰巧从函数类型构建的成员类型的指针。

#include <type_traits>

template <typename T, class C>
struct is_member_function_pointer_of
    : public std::false_type
{};

template <typename FT, class C>
struct is_member_function_pointer_of<FT C::*, C>
    : public std::is_function<FT>::type
{};

在不支持 C++11 的情况下,可以替换 Boost 版本。

请注意,这忽略了从T Base::*to的隐式转换T Derived::*

于 2013-07-30T01:04:20.403 回答