簡體   English   中英

如何唯一標識 C++ 中的 std::function 中包含的 lambda(可能正在捕獲)

[英]How can I uniquely identify a lambda (may be capturing) contained within a std::function in C++

I planned to use a set-like container (for example QSet in qt or std::set ) to hold std::function objects wrapping lambda (capturing or non-capturing) to avoid adding the same lambda multiple times. 而這些類都需要用戶提供按鍵類型的比較或hash計算功能。

但是,據我所知,如果底層 lambda 正在捕獲,則target()方法返回nullptr ,因此無法根據其返回值比較兩個std::function

那么如何比較兩個任意的std::function ,或者至少從std::function計算唯一值?

每個 lambda 都有自己獨特的類型,因此您可以根據需要使用 target_type。 只有非捕獲 lambda 可以轉換為 function ptrs。 請注意,比較兩個函數是否相等並非易事,具體取決於您的上下文中的相等。 如果您的代碼中有多個部分定義“相同” lambda 它仍然可能具有不同的類型。

auto l1 = [](){};
auto l2 = [](){};

l1 和 l2 具有不同的類型,並且會在您的集合中創建不同的條目。

暫無
暫無

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

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