从std :: function的参数推导出模板参数

时间:2018-08-27 08:17:10

标签: c++ templates

我有以下功能模板

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。

0 个答案:

没有答案