2014-11-09 1 views
1

В настоящее время я работаю над классом делегата для использования в нескольких моих программах. Мой код для свободных функций работает, но я получаю ошибку компилятора в коде, который связывает функции-члены. Содержимое ошибки компилятора:Ошибка компилятора "unqualified-id" при доступе к члену класса с помощью указателя

error: expected unqualified-id before '(' token.

Я не вижу причин, почему это так. Мой код, за исключением частей, которые собирают хорошо, выглядит следующим образом:

template <typename T> class Delegate; 

template <typename R, typename... Args> 
class Delegate<R(Args)> 
{ 
    typedef void* InstancePtr; 

//... 

    template <typename C, R (C::*classFunction)(Args...)> 
    static inline R MakeStubFunction(InstancePtr instance, Args... args) 
    { 
     // vvv error on this line vvv 
     return (static_cast<C*>(instance)->(*classFunction))(args...); 
    } 

//... 

}; 

Можно ли указать источник ошибки компилятора? В интересах решения таких проблем в будущем, что подразумевается под «неквалифицированным-id»?

+1

«неквалифицированные-идентификатор» означает что-то вроде «какой-то имя», то есть буквы, без специальных символов, как фигурные скобки, а скорее имя переменной, имя типа, функция имя и т. д. – leemes

ответ

5

Удалить фигурные скобки и использовать ->* оператор:

return (static_cast<C*>(instance)->*classFunction)(args...); 
+0

Чтобы успокоить мое любопытство (если вы согласны), вы знаете * почему * синтаксис, который я использовал, не работает? Кажется, что это должно быть правильно ... – Conduit

+0

@Conduit Вы не можете «разыменовать» указатель на нестатический элемент без объекта, но это именно то, что вы пытались сделать внутри фигурных скобок. – Columbo

+0

Ahhh - это потому, что фактическое содержимое функции может меняться в зависимости от переменных-членов, содержащихся в экземпляре? – Conduit

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

  • Нет связанных вопросов^_^