我写了这样一个函数,用于使临时变量的 begin 和 end 迭代器也可以直接作为 STL 中的泛型函数的参数:
template <typename Function, typename Container, typename... RestArgs>
auto apply(Function f, Container &c, RestArgs &...args) -> decltype(f(std::begin(c), std::end(c), args...)) {
return f(std::begin(c), std::end(c), args...);
}
但是在编译时遇到了错误,因为 STL 中的泛型函数都有多个重载版本,所以编译器无法确定是哪个版本。
(可能是编译器没有展开类型的缘故,因为理论上来说是可以通过 args 来求出 f 类型的)
比如说我调用了:
apply(std::copy_if, get_vector(), [](){/* a lambda function*/})
其中函数 get_vector 会返回一个 std::vector,但是编译器无法推导出 std::copy_if 所用的版本。
所以……有没有办法手动指定重载函数的版本?
template <typename Function, typename Container, typename... RestArgs>
auto apply(Function f, Container &c, RestArgs &...args) -> decltype(f(std::begin(c), std::end(c), args...)) {
return f(std::begin(c), std::end(c), args...);
}
但是在编译时遇到了错误,因为 STL 中的泛型函数都有多个重载版本,所以编译器无法确定是哪个版本。
(可能是编译器没有展开类型的缘故,因为理论上来说是可以通过 args 来求出 f 类型的)
比如说我调用了:
apply(std::copy_if, get_vector(), [](){/* a lambda function*/})
其中函数 get_vector 会返回一个 std::vector,但是编译器无法推导出 std::copy_if 所用的版本。
所以……有没有办法手动指定重载函数的版本?