2012-01-19 3 views
0

Привет, У меня есть проблема с компиляцией моего класса в XCode, gcc (Apple LLVM compiler 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

Какое сообщение об ошибке вы получаете точно? –

+0

Вы говорите, что у вас «есть проблема», но вы не говорите * что * проблема. – sth

+0

Аргумент шаблона для параметра типа шаблона должен быть типа – oiko

ответ

2

Когда компилятор компилирует этот шаблон, T еще не известен. Поэтому точный тип T_EventFunc и T_EventMap еще не известен и что компилятор не знает, что T_EventMap::value_type в конечном итоге будет типом. Для ясности, используйте ключевое слово typename:

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

great thanx это работает :) Я предполагал что-то с ключевым словом typename, нужно что-то узнать об этом. Это решение работает 'std :: pair res = m_eventMap.insert (typename T_EventMap :: value_type (callTime, funcPtr));' – oiko

0

Поскольку вы не предоставите ошибки вы получаете, мы можем только догадываться. И я предполагаю, что результат вашего вставки-запроса неверен.

Согласно this refernce, возвращаемое значение std::map::insert - std::pair<iterator, bool>. Вы уверены, что итератор int?

+0

извините, я скопировал тестовую версию :(orig is : std :: pair res = m_eventMap.insert (T_EventMap :: value_type (callTime, funcPtr)); err: Аргумент шаблона для параметра типа шаблона должен быть типом – oiko

Смежные вопросы