2012-04-13 25 views
6

次の例では、メンバー関数の戻り値の型を取得するにはどうすればよいですか?メンバー関数の宣言型

template <typename Getter> 
class MyClass { 
    typedef decltype(mygetter.get()) gotten_t; 
... 
}; 

問題は、もちろん、MyClassを定義する際に「mygetter」オブジェクトがないことです。

私がしようとしているのは、ゲッターが返すものをキーとして使用できるキャッシュを作成しています。

答えて

11

私はあなたが何を望んでいるかわかりませんが、mygetterは単にタイプGetterのオブジェクトであると思われます。ちょっとああ、私はそれについて知っていたことはありません

typedef decltype(std::declval<Getter>().get()) gotten_t; 
+0

(あなたが唯一の型推論のためにそれを使用することができます)他に何もせずにそのようなオブジェクトを取得するためにstd::declvalを使用してください。それは素晴らしいです!私はいつも 'Getter()。get()'を使い、 'Getter'はデフォルトで構築可能であると仮定しました。 –