std :: function的模板推导

时间:2018-12-30 12:45:25

标签: c++ templates c++14

我有以下代码:

template<typename T>
void foo(T, std::vector<T>){}

template<typename T>
void bar(T, std::function<void(T)>){}

int main()
{
    foo(0, std::vector<int>{});
    bar<int>(0, [](int){});
}

foo可以在不显式指定模板类型的情况下工作,并且bar在我未指定以下类型的情况下不起作用:

bar(0, [](int){});  //Compile error: no matching function for call to 'bar(main()::<lambda(int)>)'
  1. 为什么模板推导适用于foo但不适用于bar?我该如何运作?我不想对整个函数类型进行模板化,因为我想确保该函数采用与第一个参数相同的参数类型T。
  2. 由于可以从第一个参数中推断出模板类型T,因此我可以做以下事情:foo(0, std::vector<auto>{});(我知道它不能编译)。有解决方法吗?

0 个答案:

没有答案