類別模板的推導
類別模板的模板參數推導旨在簡化函數模板和類別模板之間的行為。然而,該提案最初包含部分推導,其中僅明確指定參數的子集。
部分推導問題
Botond Ballo 提出的問題凸顯了潛在的可能性部分演繹可能導致含糊解釋的情況下的混亂。例如:
tuple<int> t(42, "waldo", 2.0f);
在這種情況下,如果允許部分扣除,則預期扣除將為 tuple
當前行為
由於這些問題,從提案中刪除了類模板的部分扣除。目前,推導只能套用於所有模板參數或不套用於任何模板參數。
範例
考慮以下類別模板:
template <std::size_t S, typename T> struct test { test(T (&input)[size]) : data(input) {} type_t (&data)[size]{}; };
及其輔助函數:
template <std::size_t S, typename T> test<S, T> helper(T (&input)[S]) { return input; }
在給定的code:
int buffer[5]; auto a = helper<5, int>(buffer); // No deduction auto b = helper<5>(buffer); // Type deduced auto c = helper(buffer); // Type and size deduced
僅允許完全推導,如嘗試僅推導類型時的錯誤所示:
auto b = helper<5>(buffer); // Type deduced: FAILS.
以上是為什麼從類別模板中刪除部分演繹?的詳細內容。更多資訊請關注PHP中文網其他相關文章!