例如,我想从两个序列left
和right
中获取最大值列表,并将结果保存在max_seq
中,这些都是先前定义和分配的,
std::transform(left.begin(), left.end(), right.begin(), max_seq.begin(), &max<int>);
但这不会编译,因为编译器说
note: template argument deduction/substitution failed
我知道我可以在struct
内或lambda
内包装“std :: max”。但有没有办法directly
使用std::max
没有包装器?
答案 0 :(得分:6)
std::max
有多个重载,因此编译器无法确定您要调用哪个。使用static_cast
消除歧义,您的代码将被编译。
static_cast<int const&(*)(int const&, int const&)>(std::max)
你应该只使用lambda
[](int a, int b){ return std::max(a, b); }
答案 1 :(得分:0)
模板扩展和实例化在编译时发生。因此,您只能将模板功能传递给模板。
你可以在运行时传递一个instanciated(模板化)函数(然后它是一个&#34;普通&#34; C ++函数)。