我有一個以字符串作爲密鑰並存儲lambda的映射。爲std :: map生成唯一密鑰
我到目前爲止已經試過
std::map <int, auto> callbackMap
並把一個lambda那裏沒有一個相同數量了。這可能嗎 ?我不斷收到錯誤,說函數不能有自動作爲構造函數。
我有一個以字符串作爲密鑰並存儲lambda的映射。爲std :: map生成唯一密鑰
我到目前爲止已經試過
std::map <int, auto> callbackMap
並把一個lambda那裏沒有一個相同數量了。這可能嗎 ?我不斷收到錯誤,說函數不能有自動作爲構造函數。
這是因爲auto
只是一個編譯時「功能」,它將您需要的類型轉換爲一個非常明確的類型!您可能會將它與「變體」類型混淆......它不會以這種方式工作。
auto X = 3;
這並不意味着X
是一個「變體」。這就像編譯將其轉換爲:
int X = 3;
所以,請注意X
有一個非常明確的類型。
您可以在地圖中存儲功能(lambda是運營商),沒問題。但你的std::function<...>
非常明確。例如:
std::map< int, std::function< int(int) > > callbackMap;
callbackMap[ 0 ] = std::function< int(int) >([] (int a) { return a + 1; });
callbackMap[ 1 ] = std::function< int(int) >([] (int a) { return a - 1; });
callbackMap[ 2 ] = std::function< int(int) >([] (int a) { return a * 2; });
callbackMap[ 3 ] = std::function< int(int) >([] (int a) { return a/2; });
注意,你還需要知道你的函數簽名......(這裏在我的例子int(int a)
,但你可以定義當然,你所希望的方式)。
如果你決定存儲「指向函數的指針」,你將會遇到同樣的問題。你必須知道簽名!沒什麼不同。
有沒有一種方法來存儲一個通用的lambda,我的原始解決方案是每個lambda有一個靜態成員,但我覺得非常錯誤。 –
你總是可以嘗試'void *',但你顯然需要用這種方式來管理自己的內存。除非所有的lambda具有相同的調用約定,否則參數和參數都是一樣的。然後你可以使用'std :: function <>'作爲這個答案最初的說法。 –
「有沒有辦法存儲一個通用的lambda?」我編輯了答案,請再讀一遍。我希望它能幫助你! –
'1','2','3'等都是唯一的鍵。他們幫助你嗎?如果不是,爲什麼?你想解決什麼問題? – Nawaz
std :: map只接受每個鍵的一個值,所以剛剛從'0'開始並增加? – Smash
你的問題不清楚。我建議你在獲得降低成功之前重新制定它... –