我们有一个将函数对象作为参数的函数。该函数有两个重载,它们的函数签名不同。
#include <functional>
template <typename T>
void foo(std::function<void(T)> bar)
{
}
template <typename T>
void foo(std::function<void(int, T)> bar)
{
}
int main()
{
foo([](float number) {
});
return 0;
}
但是,此代码无法编译。
error C2784: 'void foo(std::function<void(int,T)>)' : could not deduce template argument for 'std::function<void(int,T)>' from 'main::<lambda_2b4e4413ec419a4ac179a0b64ebde221>' : see declaration of 'foo'
error C2784: 'void foo(std::function<void(T)>)' : could not deduce template argument for 'std::function<void(T)>' from 'main::<lambda_2b4e4413ec419a4ac179a0b64ebde221>' : see declaration of 'foo'
我认为模板本身和重载都有问题。如何提供与上述签名匹配的两个函数?