您好我在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。
答案 0 :(得分:2)
当编译器编译此模板时,T
尚未知晓。因此,T_EventFunc
和T_EventMap
的确切类型尚不清楚,编译器不知道T_EventMap::value_type
最终会成为一种类型。为清楚起见,请使用typename
关键字:
... = m_eventMap.insert(typename T_EventMap::value_type(callingTime, funcPtr));
答案 1 :(得分:0)
由于您没有提供您所获得的错误,我们只能猜测。我的猜测是你的插入调用结果不正确。
根据this refernce,std::map::insert
的返回值为std::pair<iterator, bool>
。你确定迭代器是int
吗?