【发布时间】:2021-03-04 15:12:20
【问题描述】:
我想从一个容器 c 转换所有对象 - 例如 char 类型,并将结果 - 类型为 foo - 存储在另一个容器 v 中。所需的转换函数是一个重载函数 - 称之为to_foo。
考虑以下example:
#include <algorithm>
#include <vector>
struct foo {};
foo to_foo(char) { return {}; }
foo to_foo(int) { return {}; }
int main()
{
std::array<char, 1> c;
std::vector<foo> v(c.size());
// cannot determine which instance of overloaded function "to_foo" is intended:
std::transform(c.begin(), c.end(), v.begin(), to_foo);
// ok:
std::transform(c.begin(), c.end(), v.begin(), [](auto const& ch) { return to_foo(ch); });
}
虽然我认为在第一次转换中编译器不知道应该采用哪个 to_foo 重载(另一方面,他不能从迭代器的 value_type 中推断出它吗?) ,我不明白为什么他能够在第二次变换中这样做。这里发生了什么?
【问题讨论】: