7
私は、構造体のどこかにあります:C++でオーバーロードされたメソッドの戻り値の型を取得する方法は?
struct A {
ComplicatedType1 f();
ComplicatedType2 f(int);
};
私はコンパイル時にヘルパーを使用してf()
の戻り値型を取得したいです。
using Type = std::result_of<decltype(&A::f)()>::type;
をしかし、コンパイラは私に合理的なエラーを与える:私はstd::result_of<>
をしようとしている「オーバーロードされた関数への参照を解決できませんでした」。
だから、thisが受け入れられ、upvoted回答を参照してください、これはstatic_cast<ComplicatedType1 (A::*)()>(&A::f)
を作ることを提案しますが、私はComplicatedType1
を持っていません。私は再帰で立ち往生している。
どのようにコードの最小と私のusing
式の中ComplicatedType1
を取得しますか?
これはdecltypeの仕事ですか? –
'auto'キーワードでタイプ控除を使用できませんか? –
'std :: result_of'はテンプレート引数としてa * type *を期待しますが、'&A :: f'は型ではありません。どちらも '(&A :: f)()'ではありません。さらに、 'result_of'は特別なpre-C++ 11ツールであり、ほとんどのアプリケーションで' decltype'に取って代わられます: 'decltype(f)) – dyp