template <typename T, typename R, typename ...A>
struct decay<T, R(A..., ...)> { using type = R(*)(A..., ...); };
這是什麼意思?我需要一些幫助〜struct decay <T,R(A ...,...)>是什麼意思
template <typename T, typename R, typename ...A>
struct decay<T, R(A..., ...)> { using type = R(*)(A..., ...); };
這是什麼意思?我需要一些幫助〜struct decay <T,R(A ...,...)>是什麼意思
int foo(int);
int bar(int, ...);
這些是兩個不同的功能。 foo
類型爲int(int)
。 bar
類型爲int(int,...)
。
...
是C風格的可變參數,不要與也使用...
的variardic模板參數混淆。
template <typename T, typename R, typename ...A>
struct decay<T, R(A..., ...)> { using type = R(*)(A..., ...); };
的std::decay
內boost::hana
的優化版本實現的這一部分。 typename T
和T
零件是紅鯡魚,這是優化的一部分。
它是一個專門匹配R(A..., ...)
,其中A...
和R
是從函數簽名中推導出來的。
如果通過double(int, char, ...)
作爲第二個參數到這個hana::details::decay
,R
將double
和A...
將int, char
。而...
將「匹配C風格的varags」。
這個特殊的專業化的目的是映射函數簽名,以C樣式可變參數結尾,指向相同的簽名。因此它將double(int, char, ...)
映射到double(*)(int, char, ...)
。
C樣式可變參數與模板variardic參數不一樣。他們早於它。
非常感謝。這就是我想知道的。 –
你從哪裏看到該代碼?它看起來類似於某人合理用於實現'std :: decay'的內容,但沒有理由使用'T' ......我的第一個假設是你錯誤地複製了它。 – Yakk
@Yakk:這段代碼來自boost :: hana。 –
Aha:http://www.boost.org/doc/libs/1_62_0/libs/hana/doc/html/structboost_1_1hana_1_1detail_1_1decay.html這是一個優化。這解釋了否則無意義的設計;他們正在解決模板實例化的低效問題。 – Yakk