爲什麼下面代碼中嵌套的std::bind
沒有被任何主編譯器(VS2010/2012,gcc,clang)隱式轉換爲std::function<void()>
?這是標準行爲還是錯誤?爲什麼這個std :: bind沒有轉換成std :: function?
#include <functional>
void bar(int, std::function<void()>) { }
void foo() { }
int main()
{
std::function<void(int, std::function<void()>)> func;
func = std::bind(bar, 5, std::bind(foo));
std::cin.get();
return 0;
}
因爲嵌套的綁定表達式被熱切地評估。實際上,你正在做類似於'std :: bind(bar,5,void)'的東西,這是無意義的。 – ildjarn
這並不回答這個問題,但是這個:'func = std :: bind(bar,5,foo);'按照你的預期工作。 – 111111
你試圖實現什麼? 'bar'可以直接指定給'func',通過綁定你正在創建一個可以不帶任何參數(或任何組合或參數)調用的函子的參數。使用當前代碼(假設它已編譯)'func'必須用int和'std :: function'調用,兩個參數都會被忽略,並且會觸發'bar(5,foo) ... –