Я пытаюсь передать указатель функции-члена в качестве параметра шаблона. Вот код:C++ компиляция ошибки при использовании функций-членов в качестве параметров шаблона
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.
Заранее спасибо.
UPDATE:
Это кажется код должен быть неправильно, как mptr
является переменной во время выполнения. С другой стороны, предыдущий фрагмент кода компилирует:
так ... это правильно? это зависит от компилятора?
Спасибо. Я добавил указатель на функцию-член как параметр шаблона 'mbind()', и он работает. Вызов выглядит так: 'mbind (" getWidth ");' Теперь мне интересно, есть ли другой способ сделать обращение к 'mbind()' более простым для пользователя (без указания всех этих аргументов шаблона). Спасибо! –
user1192525
так ... мы не знаем, действительно ли это (и поддерживается только некоторыми компиляторами) или нет: d – user1192525