首頁 >後端開發 >C++ >為什麼從類別模板中刪除部分演繹?

為什麼從類別模板中刪除部分演繹?

Susan Sarandon
Susan Sarandon原創
2024-11-11 13:55:031025瀏覽

Why Was Partial Deduction Removed from Class Templates?

類別模板的推導

類別模板的模板參數推導旨在簡化函數模板和類別模板之間的行為。然而,該提案最初包含部分推導,其中僅明確指定參數的子集。

部分推導問題

Botond Ballo 提出的問題凸顯了潛在的可能性部分演繹可能導致含糊解釋的情況下的混亂。例如:

tuple<int> t(42, "waldo", 2.0f);

在這種情況下,如果允許部分扣除,則預期扣除將為 tuple。然而,tuple也是有效類型,從而產生歧義。

當前行為

由於這些問題,從提案中刪除了類模板的部分扣除。目前,推導只能套用於所有模板參數或不套用於任何模板參數。

範例

考慮以下類別模板:

template <std::size_t S, typename T>
struct test
{
    test(T (&amp;input)[size]) : data(input) {}
    type_t (&amp;data)[size]{};
};

及其輔助函數:

template <std::size_t S, typename T>
test<S, T> helper(T (&amp;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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn