如果一个类具有这样的特殊成员函数(在另一个示例中位于此处),我会尝试对模板进行特殊化:

template <typename T>
class has_begin
{
    typedef char one;
    typedef long two;

    template <typename C> static one test( decltype( &C::AnyFunc) ) ;
    template <typename C> static two test(...);

public:
    enum { value = sizeof(test<T>(0)) == sizeof(char) };
    enum { Yes = sizeof(has_begin<T>::test<T>(0)) == 1 };
    enum { No = !Yes };
};

直到AnyFunc重载,此方法才能正常工作:
class B : public vector<int>
{
public:
    void AnyFunc() const;
    void AnyFunc();
};

如何重写测试代码以使模板中的结果为"is"?

最佳答案

找到了适用的版本:

    template <typename C> static one test( decltype(((C*)0)->AnyFunc())* ) ;

如果要验证对象是否具有const函数,请使用以下命令:
    template <typename C> static one test( decltype(((const C*)0)->AnyFunc())* ) ;

此版本将无法检测带有参数的函数:
class B : public std::vector<int>
{
public:
    //void AnyFunc() const;
    //void AnyFunc();
    int AnyFunc(int);
};

09-06 18:47