멤버 함수 포인터를 템플릿 매개 변수로 전달하려고합니다. 여기에 코드입니다 :멤버 함수를 템플릿 매개 변수로 사용할 때 컴파일 오류가 발생했습니다.
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입니다.
미리 감사드립니다.
는 UPDATE :
그건은 mptr
는 런타임 변수로 코드가 잘못 해봐야 할 것 같습니다. 이 올바른지 ...
을 너무 : 다른 한편으로, 코드의 이전 발췌 컴파일? 컴파일러에 의존합니까?
감사합니다. 멤버 함수에 대한 포인터를'mbind()'의 템플릿 매개 변수로 추가했습니다. 호출은 다음과 같습니다 :'mbind ("getWidth");' 이제 mbind()에 대한 호출을 더 간단하게 만들 수있는 다른 방법이 있는지 궁금합니다. 사용자 (모든 템플릿 인수를 지정하지 않아도 됨). 감사합니다. –
user1192525
그래서 ... 우리는 이것이 유효한지 (일부 컴파일러에서만 지원되는지) 알지 못합니다 : d – user1192525