繁体   English   中英

指向模板参数的类成员函数的指针

[英]Pointer to class member function of template parameter

嗨我在XCode,gcc(Apple LLVM编译器3.0)中编译我的类有问题我写了类ContextSchedule它意味着封装其他类成员函数列表的类,并且在MSVC ++ 2005下编译它没有问题。

template<class T>
class C_ContextScheduler
{
public:
    typedef void (T::*T_EventFunc)();
    typedef std::map<u64, T_EventFunc>  T_EventMap;

public:
    //@ c-tor
    C_ContextScheduler(T & context) : m_Context(context), m_currentTick(0) {};

    //@ Schedule
    //@ funcPtr - pointer to function of class T
    //@ dellayTime in milliseconds - after dellayTime from now will be funcPtr called
    void    Schedule(T_EventFunc funcPtr, u32 dellayTime)
    {
        u64 callingTime = m_currentTick + dellayTime;
        std::pair<int, bool> res = m_eventMap.insert(T_EventMap::value_type(callingTime, funcPtr));
        SC_ASSERT(res.second);
    }  ...

有任何想法吗? 想要保存这个解决方案的模板方式,thnx。

当编译器编译此模板时, T尚不知道。 因此, T_EventFuncT_EventMap的确切类型也是未知的,编译器不知道T_EventMap::value_type最终会成为一个类型。 要明确这一点,请使用typename关键字:

... = m_eventMap.insert(typename T_EventMap::value_type(callingTime, funcPtr));

既然你没有提供你得到的错误,我们只能猜测。 我的猜测是你的插入调用的结果是不正确的。

根据这个引用std::map::insert的返回值是std::pair<iterator, bool> 你确定迭代器是一个int吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM