你還沒說你希望能夠把它在一個向量與錯誤後func2
做什麼類型。
您可以輕鬆地使用std::bind
把它的載體,如果你提前知道時間的參數:
const std::vector<std::function<void(std::string)>> functions
{
func1,
std::bind(func2, std::placeholders::_1, 5, 6)
};
現在functions[1]("foo")
將調用func2("foo", 5, 6)
,並且每次都會通過5
和6
到func2
。
下面是一個使用拉姆達代替std::bind
const std::vector<std::function<void(std::string)>> functions
{
func1,
[=](const std::string& s){ func2(s, func2_arg1, func2_arg2); }
};
如果你不知道的參數還沒有同樣的事情,你可以綁定引用一些變量:
int func2_arg1 = 5;
int func2_arg2 = 6;
const std::vector<std::function<void(std::string)>> functions
{
func1,
std::bind(func2, std::placeholders::_1, std::ref(func2_arg1), std::ref(func2_arg2))
};
現在functions[1]("foo")
將調用func2("foo", func2_arg1, func2_arg2)
,您可以將新值賦給整數以將不同參數傳遞給func2
。
,並使用lambda函數,而不是std::bind
const std::vector<std::function<void(std::string)>> functions
{
func1,
[&](const std::string& s){ func2(s, func2_arg1, func2_arg2); }
};
這是非常醜陋的,雖然,因爲你需要保持周圍的int
變量只要調用對象(關閉或綁定表達式)指對他們存在。
爲什麼不給他們同樣的簽名。您不必使用功能中的所有參數 – 2014-10-02 10:02:37
爲什麼您需要爲此使用矢量?一個向量只能包含共享相同類型的類型(多態性計數)。如果您具有不同簽名的功能,您將無法執行(auto && function:functions){function(); }',所以你需要保持它們分開,或者統一它們的簽名(但是如果它們具有不同的簽名,這最後一個選項感覺就像強迫它們進入向量......) – JBL 2014-10-02 10:07:55
@EdHeal - 我想我可以。只是想知道替代品。 – ksl 2014-10-02 10:12:37