![](/img/trans.png)
[英]How can I move an std::function containing and capturing 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.