假設我有一個函數有兩個參數,爲什麼從綁定返回的對象會忽略額外的參數?
void f(int x, int y);
,我想綁定其中之一。我可以用std::bind
如下:
auto partiallyBoundF = std::bind(f, 10, _1);
partiallyBoundF
只有一個參數,但我可以用一個以上的調用它。超越第一的爭論甚至不必是一個類型,使任何意義的:
partiallyBoundF(20, 0);
partiallyBoundF(0, 44, -99, "Hello", 4.5, true, []{});
從bind
返回允許什麼對象的目的,要傳遞額外的參數?它允許調用錯誤進行編譯,而其他任何地方都會被拒絕。
什麼編譯器?我想這可能只是一個不合規的編譯器(因爲允許那些額外的參數實際上沒有意義,我懷疑標準允許這樣做)。例如,MSVC通過定義每個可變參數模板來模擬可變參數模板,以獲取最大可能的模板參數,並將這些參數默認爲某些NIL類型。也許這樣的事情是你行爲的原因? –
@ChristianRau:這是標準的一部分。它也是TR1的一部分。 20.8.2/4提出了一個意見,即期望的實現是用於一個可變參數模板化的operator(),只需要傳遞給它的任何東西,而不管參數的類型或數量。 TR1有類似的措辭。 – KnowItAllWannabe
在你的情況下,f(w1,...,wN)其中'N = sizeof ...(bound_args)'(綁定調用的參數個數)應該是一個有效的表達式,見20.8.9.1.2/2和20.8.2/1。編輯:它不禁止任何其他方式來調用它。 – dyp