我試圖找到使用什麼G ++編譯器參數編譯此示例C++代碼:是否可以使用functor作爲std :: function的模板參數?
#include <stdio.h>
#include <functional>
struct mystruct
{
int a;
int operator()(int y) { return y + 1; }
};
int main()
{
std::function<mystruct> foo;
return 0;
}
在CPP參考被寫的std ::函數模板參數可以是「...或其他函數對象」 。我從事包含多個std :: function的大型項目,並且可以使用g ++構建項目。我試圖建立它在VS2015,但是編譯器在此類代碼抱怨:
錯誤C2027:使用未定義的類型 '的std :: _ Get_function_impl < _Fty>' 與 [ _Fty = MYSTRUCT ]
時我試圖編譯上述小樣本下克++與-std = C++ 11也comlains:
錯誤:骨料'的std ::功能的具有不完整的類型和不能被定義
因此,我認爲在我們的大可建立的項目g ++可能已經切換了一些提供這種能力的擴展。
你認爲模板參數可以是除函數類型以外的任何東西(例如'int(double,char)')? cppreference說它可以存儲函數對象。無論如何,如果'mystruct'有多個'operator()'重載,或者operator()'是模板化的,它會怎麼做?它不能安全地鍵入 - 擦除呼叫簽名。 – chris