嗨,我在用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));

关于c++ - 指向模板参数的类成员函数的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8928385/

10-10 11:29