我习惯了完全专业模板的模板语法:
template<typename T>
struct S {};
template<>
struct S<int> {}; // Fully specialized
但我不知道我可以用它作为一个论点:
void fn(std::function<> lambda){
}
int main() {
fn([](){ std::cout << "Hello"; });
}
上述意思是“给我一个完全专业化的std :: function作为参数”吗?
为什么没有template <> std::function
语法?
答案 0 :(得分:1)
看来(参见this documentation of std::function
)C ++标准没有提供std::function<signature>
的完全专用版本,即signature=void()
之类的默认版本。因此,如果您的代码已编译,则使用的C ++标准库不完全符合标准。您应该提交错误报告。