經過question關於std::bind
後,我想知道是否有可能持有由std::bind
創建的功能vector
,所以我可以避免使用std::function
及其重磅包裝。如何在不存在模板的特定情況下存儲std :: bind的向量?
#include <iostream>
#include <functional>
#include <typeinfo>
#include <vector>
int add(int a, int b) {return a + b;}
int main() {
//I believe this here is just a special type of bound function.
auto add2 = std::bind(add, std::placeholders::_1, 2);
auto add3 = std::bind(add, std::placeholders::_1, 3);
//Yup.
std::cout << typeid(add2).name() << std::endl;
//Here's the type of the second function
std::cout << typeid(add3).name() << std::endl;
//Is there a nicer way to do this?
std::vector<decltype(std::bind(add, std::placeholders::_1, 1))> vec;
return 0;
}
雖然可以創造的std::bind
功能的載體,是有辦法,我就不必爲了宣佈一個容器而沒有空/空型提供綁定功能的具體情況由std::bind
製作的功能?
爲什麼不'std :: vector vec;'?或者你假設想'安置'每個向量元素? –
SU3
我希望能夠初始化而不必提供任何綁定的功能。所以在手之前不要內聯'std :: bind'或綁定函數。 – VermillionAzure
好吧,'bind'返回一個未指定的類型,所以你需要'bind'表達式才能推斷出類型。無論如何,你的'vector'的效用是相當有限的,因爲改變bind表達式中綁定參數以外的任何東西都會改變結果類型,所以你沒有多少選擇'bind'您可以添加到該「矢量」的表情。 – Praetorian