我用auto
來存儲就在自動分配構建一個lambda,但今天我看着this interesting paper on functional programming using c++ templates和跨越這些代碼來:使用自動爲定義的函數
template < typename T , typename Ops >
T fold (Linked <T > * p)
{
T acc = Ops :: initial() ;
while (p) {
acc = Ops :: bin (acc , p - > head) ;
p = p - > tail ;
}
return acc ;
}
// later, in main():
auto sumup = fold <int , IntOps >;
我想了解sumup
的類型是什麼,因爲它不是分配給fold
的輸出,而是分配給實際功能fold
本身!我決定看看auto
顯示使用的各種方式here。我假設這個auto
的使用屬於該頁面上的(1)
,這是一個通用變量初始化器。什麼是不明確的是sumup
的類型是什麼?
而且,將auto
可能是同一這裏這樣做:
using functionType = int (Linked<int>*);
functionType sumup = fold <int , IntOps >;
這可能是不正確的,但我很好奇,如果我的想法是正確的方向。當實例化時,fold <int , IntOps >
將返回int
並採用Linked<int>*
的單個參數,因此我的using
聲明是說同樣的事情?這是using
聲明一個真正的「類型」,是auto
抵達這個using
相同的扣除?
非常接近。簡單''自動'衰減,所以你得到一個函數指針類型 - 'int(*)(Linked *)' –
既然你有答案,我想說我發現這個代碼的問題有問題。有人會很難弄清楚這個「sumup」是什麼。 – SergeyA
@SergeyA是真的,事實上,這是一個普遍的弱點,在任何語言中都有隱式類型推理。動態語言會變得更糟。我仍然發現我更喜歡明確的類型聲明,除非這是很難知道的情況,最好留給編譯器。 – johnbakers