私は、A
というメソッドのクラスのようなものをいくつか持っています。たとえば、get_value()
は、さまざまな型の値を返します。そして1つのクラスB
は、メソッドvalue()
で値を返します。例:クラスメンバ関数の戻り値の型
ここで、これらのクラスの値を取得する関数が必要です。それは私に始まるVS2010でコンパイルエラーの数与え
template<typename T>
auto get_value(const T & t) -> result_of<decltype(&T::get_value)(T)>::type
{
return t.get_value();
}
:B
について
Error 1 error C2061: syntax error : identifier 'type' c:\_data\work\vmxi\c++\vox\vox\template_specialization.h 51
を、私は正常に動作し、過負荷を、持っている私は、機能を持っています。質問は、どのようにresult_of<>()
で動作するようにget_value()
ですか?
P.S.うーん、私はちょうど-> decltype(T().get_value())
を使っていたかもしれないことに気づきました。うまくいきます。しかし、なぜresult_of<>()
は機能しませんか?
result_of<decltype(&A_like1::get_value)(A_like1)>::type i=0;
あなたがC++のどのバージョンを使用していますか? C++ 14を使用している場合、後続の戻り値の型はまったく必要なく、単に 'auto'を使用します。 – NathanOliver
@ NathanOliver私は彼が 'A'のようなクラスで動作するようにここに提示され、' B'のようなクラスで動作するように、同じ名前の2つのテンプレート関数を使用すると仮定します。そして、SFINAEをトリガするために後続の戻り値の型が必要です。 – Corristo
@Corristoはいはい。私は逃しました。ありがとう。 – NathanOliver