Ошибка компиляции C++ при использовании функций-членов в качестве параметров шаблона

StackOverflow https://stackoverflow.com//questions/9693911

Вопрос

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

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

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

Это было полезно?

Решение

mptr - это переменная среды выполнения - вы не можете дать его как параметр шаблона.Check http://ideone.com/cil4c .

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

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

Другие советы

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

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

ПС:ты забыл () после get_value<>.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top