我是一個類,看起來像這樣:重載函數模板基於參數的函數參數類型
template<typename A>
struct List {
...
template<typename Fn, typename B = typename std::result_of<Fn(A)>::type>
List<B> map(Fn f) const
{ ... }
};
我想超載map
,並允許它接受作爲參數A
類型的吸氣劑,所以我們可以做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
?另外,有沒有辦法讓超載成爲可能?
目前在' mapGet'我做了'(x。* getter)()',其中'x'是列表的一個元素。我不確定我是否得到你;是否有可能超載'地圖',然後呢? –
@ZizhengTai你不需要兩次'map'重載 - 唯一的區別是你在每個對象上調用'f'。所有其他的邏輯是一樣的。 – Barry
哦,我明白你的意思了! –