嗨,我在用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_EventFunc
和T_EventMap
的确切类型也是未知的,并且编译器也不知道T_EventMap::value_type
最终将成为一种类型。为了清楚起见,请使用typename
关键字:
... = m_eventMap.insert(typename T_EventMap::value_type(callingTime, funcPtr));
关于c++ - 指向模板参数的类成员函数的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8928385/