簡體   English   中英

C ++ 17使用模板參數推導指南繼承lambdas集

[英]C++17 Inheriting set of lambdas with template argument deduction guides

我在看std::variant上的文章http://en.cppreference.com/w/cpp/utility/variant/visit

該示例實質上包含以下幾行(由我精心修改):

template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;

auto a = overloaded {
            [](auto arg) { std::cout << arg << ' '; },
            [](double arg) { std::cout << std::fixed << arg << ' '; },
            [](const std::string& arg) { std::cout << std::quoted(arg) << ' '; },
           };

代碼基本上將列表中的每個lambda函數用作overloaded的struct的基類。 第一行將lambda的operator()拉入結構的范圍。 第二行使用類模板參數推導指南 (C ++ 17)。

overloaded后,使用{ }括號無法理解#3行。

哪種C ++機制在這里起作用? 是使用初始化列表並將其轉換為可變參數模板參數,還是一種統一/聚合的初始化? 在此行中是否有任何實際的構造函數被調用?

有趣的是,如果我使用( )則構造會失敗。

它是聚合的初始化 ,特別是對結果類型的直接公共基礎的初始化 從C ++ 17開始,基本子對象本身不必聚合,它們是從初始化程序列表的元素中復制初始化的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM