指向实例成员函数的指针而不是 class

Pointer to member function of instance instead of class

当我根据某些条件获得指向成员函数的指针然后调用该函数时,我有以下class。

class Test
{
public:
    bool isChar(char ch) { return (ch >= 'a' && ch <= 'z'); }
    bool isNumeric(char ch) { return (ch >= '0' && ch <= '0'); }

    enum class TestType
    {
        Undefined,
        Char,
        Numeric,
        AnotherOne,
    };

    bool TestFor(TestType type, char ch)
    {
        typedef bool (Test::*fptr)(char);
        fptr f = nullptr;
        switch(type)
        {
            case TestType::Char:
                f = &Test::isChar;
                break;
            case TestType::Numeric:
                f = &Test::isNumeric;
                break;
            default: break;
        }

        if(f != nullptr)
        {
            return (this->*f)(ch);
        }

        return false;
    }
};

但实际上我不喜欢这种语法。有没有办法替换

(this->*f)(ch)

f(ch)

?

在我的真实代码中,这个函数足够大,但不太清楚 (this->*f) 是什么。我正在寻找一些 c++11 解决方案。我知道 std::function,如果找不到解决方案,我会使用它。

更新

我决定使用的解决方案,如果突然有人需要它:(感谢@StoryTeller - Unslander Monica)

bool TestFor(TestType type, char ch)
{        
    bool(Test::* fptr)(char) = nullptr;
    switch(type)
    {
        case TestType::Char:
            fptr = &Test::isChar;
            break;
        case TestType::Numeric:
            fptr = &Test::isNumeric;
            break;
        default: break;
    }

    if(fptr != nullptr)
    {
        auto caller = std::mem_fn(fptr);
        return caller(this, ch);
    }

    return false;
}

如果语法让您如此困扰,您始终可以使用 std::mem_fn 生成一个廉价的一次性包装器来围绕成员函数。

auto caller = std::mem_fn(f);
caller(this, ch);