Ошибка компиляции c ++ при использовании функций-членов в качестве параметров шаблона - PullRequest
1 голос
/ 14 марта 2012

Я пытаюсь передать указатель на функцию-член в качестве параметра шаблона.Вот код:

template <typename Ret, typename T, Ret(T::*mptr)()>
Handle<Value> get_value (Local<String> name, const AccessorInfo& info)
{
    ...
}

template <typename Ret, typename T>
void mbind (const char* name, Ret (T::*mptr)())
{
    ....
    objectTemplate->SetAccessor (String::NewSymbol (name),get_value<Ret,T,mptr>);
}

И вот эта ошибка, которую я получаю:

wrapper.h:184:5: error: ‘mptr’ is not a valid template argument for type ‘int (Cell::*)()’
wrapper.h:184:5: error: it must be a pointer-to-member of the form `&X::Y'
...

Насколько я знаю, указатели на функции-члены являются допустимыми параметрами шаблона.Я не понимаю, что не так с предыдущим кодом.Я использую компилятор g ++ 4.5.2 под Ubuntu.

Заранее спасибо.

ОБНОВЛЕНИЕ:

Кажется, код должен бытьневерно, поскольку mptr является переменной времени выполнения.С другой стороны, предыдущий фрагмент кода компилируется:

http://ideone.com/cv8pq

, так что ... правильно?это зависит от компилятора?

Ответы [ 2 ]

4 голосов
/ 14 марта 2012

mptr - переменная времени выполнения - вы не можете указать ее в качестве параметра шаблона. Проверьте http://ideone.com/CIL4C.

Редактировать

Странная вещь http://ideone.com/cv8pq, где что-то похожее на ваш код успешно компилируется и работает.

1 голос
/ 14 марта 2012

mbind уже должен принимать аргумент шаблона:

template <typename Ret, typename T, Ret (T::*mptr)()> 
void mbind (const char* name) {
    objectTemplate->SetAccessor (String::NewSymbol (name),get_value<Ret,T,mptr>()); 
}

PS: вы забыли () после get_value<>.

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