[英]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_EventFunc
和T_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.