【发布时间】:2017-03-17 18:07:59
【问题描述】:
我有一个(简化的)函数 Foo
template<typename It, typename T>
void Foo(It begin, It end, T&& CallBar)
{
CallBar(begin, end);
}
还有一个简化的函数Bar
template<typename It>
It Bar(It begin, It end)
{
return begin;
}
当我通过以下方式调用这两个函数时
std::vector<int> v{ 3, 8, 2, 5, 1, 4, 7, 6 };
Foo(v.begin(), v.end(), Bar);
我得到了错误
“声明”:无法推断“标识符”的模板参数
我还需要指定什么才能使其编译?
【问题讨论】:
-
@NathanOliver:在这种情况下有点困难,因为我使用 VS2017 的测试工具来运行最后一个代码 sn-p。
-
您可以使用通用 lambdas 来避免在
Bar中指定模板参数:Foo(v.begin(), v.end(), [](auto begin, auto end) {return begin;});