C++ 模板成员函数错误:clang不';不匹配任何成员函数
我已经编写了以下模板成员函数,但如果编译器不出错,我无法调用它:C++ 模板成员函数错误:clang不';不匹配任何成员函数,c++,templates,c++11,clang,C++,Templates,C++11,Clang,我已经编写了以下模板成员函数,但如果编译器不出错,我无法调用它: template <class T, class A> auto tpool::enqueue(T&& func, std::vector<A>&& args) -> std::vector<std::future<decltype(std::forward<T>(func)(decltype(std::forward<A(args))::
template <class T, class A>
auto tpool::enqueue(T&& func, std::vector<A>&& args)
-> std::vector<std::future<decltype(std::forward<T>(func)(decltype(std::forward<A(args))::value_type))>>
{
//...
}
tpool tp();
auto f = [] (int) { /* ... */ };
std::vector<int> args;
tp.enqueue(f, args);
模板
自动tpool::enqueue(T&&func、std::vector&&args)
->向量
args
是一个左值,因此将忽略候选者
请注意,T&&func
允许绑定左值,因为模板替换可以允许T
本身是左值引用,我们就有了(T&)&&==T&
。但是使用args
,这是不可能的,因为无论A
是什么,std::vector&&
始终是向量的右值引用
如果您不打算复制或修改参数
,您可以传递常量引用:
template <class T, class A>
auto tpool::enqueue(T&& func, const std::vector<A>& args)
通过tpool tp()代码>你的意思是tpool-tp代码>?这里有几个语法错误<代码>标准::转发
template <class T, class A>
auto tpool::enqueue(T&& func, std::vector<A>&& args)
std::vector<int> args;
tp.enqueue(f, args);
template <class T, class A>
auto tpool::enqueue(T&& func, const std::vector<A>& args)
template <class T, class V>
auto tpool::enqueue(T&& func, V&& args)
-> std::vector<std::future<decltype(func(args.front()))>>