Ari*_*rii 4 c++ templates std-function template-argument-deduction
因此,以最简化的形式,我正在进行类似的事情,
template <class T>
bool f(const T &a, const T &b, std::function<bool(const T&, const T&)> func)
{
return func(a,b);
}
template <class T>
bool g(const T &a, const T &b)
{
return true;
}
Run Code Online (Sandbox Code Playgroud)
但是,任何试图调用f(),任何事情,f('a', 'b', g),f(1, 2, g),结果总是在,无论我是否通过变量为const引用或只是简单的值或任何“呼叫到‘F’没有匹配功能”。我以为它无法推断出某些模板,但是我不知道在哪里或为什么。
我承认,我对如何使用函数对象有一个非常脆弱的把握,这样做是否可能?
参数func声明为std::function,并且您尝试传递函数指针,该函数指针需要隐式转换。模板参数推导不考虑隐式转换,然后推导失败。
类型推导不考虑隐式转换(上面列出的类型调整除外):这是超载解析的工作,稍后会发生。
您可以std::function显式构造一个
f('a', 'b', static_cast<std::function<bool(const char&, const char&)>>(g<char>));
Run Code Online (Sandbox Code Playgroud)
或显式指定模板参数(以绕过模板参数推导并使隐式转换稍后生效),
f<char>('a', 'b', g<char>);
Run Code Online (Sandbox Code Playgroud)
或者只是不使用std::function。
template <class T, class F>
bool f(const T &a, const T &b, F func)
{
return func(a,b);
}
f('a', 'b', g<char>);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
469 次 |
| 最近记录: |