2017-03-15 279 views
1

我試圖找到使用什麼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 ++可能已經切換了一些提供這種能力的擴展。

+2

你認爲模板參數可以是除函數類型以外的任何東西(例如'int(double,char)')? cppreference說它可以存儲函數對象。無論如何,如果'mystruct'有多個'operator()'重載,或者operator()'是模板化的,它會怎麼做?它不能安全地鍵入 - 擦除呼叫簽名。 – chris

回答

3

可能你混淆了模板參數與要存儲的函數對象。我相信你想寫什麼是

std::function<int(int)> foo{mystruct{}}; 
0

答案是仿函數不能是其他仿函數的模板參數。感謝所有職位。

相關問題