1

メンバー関数ポインターをテンプレートパラメーターとして渡そうとしています。コードは次のとおりです。

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'
...

私の知る限り、メンバー関数へのポインターは有効なテンプレートパラメーターです。前のコードの何が問題なのかわかりません。私が使用しているコンパイラは、Ubuntuではg++4.5.2です。

前もって感謝します。

アップデート:

mptr実行時変数と同様に、コードが間違っているようです。一方、前のコードの抜粋は次のようにコンパイルされます。

http://ideone.com/cv8pq

だから...それは正しいですか?コンパイラに依存しますか?

4

2 に答える 2

4

mptrは実行時変数です-テンプレートパラメータとして指定することはできません。http://ideone.com/CIL4Cを確認してください。

編集

奇妙なことはhttp://ideone.com/cv8pqで、コードに似たものが正常にコンパイルされて機能します。

于 2012-03-13T23:56:53.070 に答える
1

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<>

于 2012-03-14T00:00:45.367 に答える