私はこのようになりますクラスだ:私はそう、map
をオーバーロードし、それを引数としてタイプA
のゲッターを受け入れることができるようにしようとしている過負荷関数テンプレートパラメータ関数の引数の型に基づいて
template<typename A>
struct List {
...
template<typename Fn, typename B = typename std::result_of<Fn(A)>::type>
List<B> map(Fn f) const
{ ... }
};
foos.map(&Foo::bar)
、bar
は、Foo
のゲッターです。
template<typename Fn, typename B = typename std::result_of<Fn(A*)>::type>
List<B> mapGet(Fn getter) const
{ ... }
しかし、私は同じ名前
map
を使用しようとすると、コンパイラは、それが曖昧だ文句:以下の機能が動作します。私の質問は、
Fn
がゲッターである場合、前に
std::result_of
が失敗して、効果的にオーバーロードされた
map
のうちの1つを無効にしますか?また、オーバーロードを可能にする方法はありますか?
Fn
前者
std::result_of
は失敗ではないでしょうゲッターは、効果的にオーバーロードされたマップのいずれかを無効にされたときに
現在、 mapGet''は '(x。* getter)()'です。ここで 'x'はリストの要素です。私はあなたを得るかどうか分からない。 'map'をオーバーロードすることは可能ですか? –
@ZizhengTai 'map'の2つのオーバーロードは必要ありません。唯一の違いは、各オブジェクトで' f'を呼び出す方法です。他のすべてのロジックは同じです。 – Barry
あなたは何を意味するか分かります! –