我有以下功能模板
template<typename T>
void func(std::function<void(const T& arg)> callback) {}
当我这样使用它时(A是用户定义的类型,我使用class A {};
:
func([] (const A& arg) {});
甚至是这样
void cb(const A& arg) {}
...
func(cb);
无法推断类型:
prog.cpp:14:2: error: no matching function for call to 'func'
func([] (const A& arg) {});
^~~~
prog.cpp:4:6: note: candidate template ignored: could not match 'function<void (const type-parameter-0-0 &)>' against '(lambda at prog.cpp:14:7)'
void func(std::function<void(const T& arg)> callback)
如果我明确实例化模板,就像这样
func<A>(cb);
然后编译代码。
在这种情况下可以做任何事情来避免显式实例化吗?也许我缺少一些非常简单的东西? C ++ 14,GCC 6.3。