簡體   English   中英

不懂 JLospinoso 書籍的模板實現

[英]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.

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