如果您不知道相应的类,如何检查方法是否相同?

时间:2019-03-15 22:45:09

标签: c++ function-pointers member-function-pointers

由于我无法比较std::function对象,只能存储成员函数和函数,因此我尝试创建自己的类。在遇到问题的地方,我必须相互比较不同类的函数和成员函数。我考虑过以下解决方案,但不确定是否有效:

template<class ClassT, class RetT, class... Args>
uint32_t getMethodAddress(RetT(ClassT::*mFunc)(Args...))
{
    union Method
    {
        RetT(ClassT::*mFunc)(Args...);
        uint32_t address;
    };

    return Method{ mFunc }.address;
}

是否可以通过uint32_t保存每个方法的地址,并且我可以将该地址与其他函数和方法进行比较而不会感到惊讶吗?


如果有人想知道课程的样子:

// Function.hpp
template<class RetT, class... Args>
class Function
{
public:
    explicit Function(RetT(*func)(Args...))
    {
        _in::Function<RetT, Args...>* pTmp{ new _in::Function<RetT, Args...>{ func } };
        _pFunc = pTmp;
    }

    template<class ClassT>
    explicit Function(ClassT* pObj, RetT(ClassT::*mFunc)(Args...))
    {
        _in::MFunction<ClassT, RetT, Args...>* pTmp{ new _in::MFunction<ClassT, RetT, Args...>{ pObj, mFunc } };
        _pFunc = pTmp;
    }

    RetT operator()(Args... args)
    {
        return (*_pFunc)(args...);
    }

    bool operator==(const Function& rhs)
    {
        return _pFunc->addr() == rhs._pFunc->addr(); // Is that valid?
    }

private:
    _in::BaseFunction<RetT, Args...>* _pFunc{ nullptr };
};

0 个答案:

没有答案