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

时间:2012-01-19 15:09:58

标签: c++ xcode function templates gcc

您好我在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。

2 个答案:

答案 0 :(得分:2)

当编译器编译此模板时,T尚未知晓。因此,T_EventFuncT_EventMap的确切类型尚不清楚,编译器不知道T_EventMap::value_type最终会成为一种类型。为清楚起见,请使用typename关键字:

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

答案 1 :(得分:0)

由于您没有提供您所获得的错误,我们只能猜测。我的猜测是你的插入调用结果不正确。

根据this referncestd::map::insert的返回值为std::pair<iterator, bool>。你确定迭代器是int吗?