Указатель на функцию-член класса параметра шаблона - PullRequest
0 голосов
/ 19 января 2012

Привет, у меня проблема с компиляцией моего класса в 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.

Ответы [ 2 ]

2 голосов
/ 19 января 2012

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

... = m_eventMap.insert(typename T_EventMap::value_type(callingTime, funcPtr));
0 голосов
/ 19 января 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...