2016-11-28 32 views
1

我已經習慣了的模板語法完全專用模板:使用的參數模板<>

template<typename T> 
struct S {}; 

template<> 
struct S<int> {}; // Fully specialized 

但我不知道,我可以用它作爲參數:

void fn(std::function<> lambda){ 
} 

int main() { 
    fn([](){ std::cout << "Hello"; }); 
} 

上面的意思是「給我一個完全專用的std ::函數作爲參數」嗎? 爲什麼不是template <> std::function語法?

+0

這意味着「一個std :: function'實例化,其所有參數默認」。爲什麼'std :: function'有我目前正在查找的默認參數。 – Quentin

+1

@Quentin根據[cppreference](http://en.cppreference.com/w/cpp/utility/functional/function)它沒有。 – Walter

+1

它編譯? http://rextester.com/WETU77257 – songyuanyao

回答

1

看來(參見this documentation of std::function)C++標準沒有提供std::function<signature>的完全專用版本,即缺省值如signature=void()。因此,如果編譯代碼,那麼所使用的C++標準庫不完全符合標準。你應該提交一個錯誤報告。

+0

我不認爲這會導致實施不符合規定,只會對用戶不友好。 – Quentin

+0

@Quentin我會建議提交一份錯誤報告,並讓圖書館的作者檢查並確定它是否確實是有意的。除非有洪水氾濫,否則NOTABUG無害。 –

+0

@TheVee是的,我完全同意。只是挑剔的詞彙:) – Quentin

相關問題