[英]Don't understand Template implementation of the JLospinoso books
在 JLospinoso (c++ Crash Course),第 10 章關於單元測試。 鏈接到書頁
有這個代碼(簡化)
struct BrakeCommand {
double time_to_collision_s;
};
template<typename T>
struct AutoBrake {
AutoBrake(const T& publish) : publish{publish} {}
---snips---
private:
const T& publish;
}
這就是所謂的
AutoBrake auto_brake{[](const BrakeCommand&) {}};
1 - 我完全不明白為什么有這么多 {} []?? 模板一無所有...
2 - C++ 編譯器 MSVC 引發此錯誤
“錯誤 C2955:‘AutoBrake’:使用 class 模板需要模板參數列表”
為什么這里有模板? 如何編譯這個程序?
非常感謝,
set(CMAKE_CXX_STANDARD 17)
一切正常!
{}[] 符號讓您感到困惑,它是由initializer_list傳遞給 AutoBrake 構造函數的lambda定義的一部分。
讓我們一步一步通過代碼行 go
AutoBrake auto_brake{[](const BrakeCommand&) {}};
1 Lambda 將 BrakeCommand 作為參數並且什么都不做
[](const BrakeCommand&) {};
2 以 initialized_list lambda 作為參數的構造函數
auto variable = [](const BrakeCommand&) {}; // to simplify understanding what is going on further
AutoBrake auto_brake{variable}; // it might be replaced by AutoBrake auto_brake(variable);
現在讓我們弄清楚模板是如何工作的。
AutoBrake auto_brake{[](const BrakeCommand&) {}};
由此聲明模板參數 T,對於您的實例是 function。
因此,預處理器從您的模板生成的代碼將如下所示
template<std::function>
struct AutoBrake {
AutoBrake(const std::function& publish) : publish{publish} {}
---snips---
private:
const std::function& publish;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.