我想用std::make_pair()
<weak_ptr, string>
,错误是:
/usr/include/c++/4.8/bits/stl_pair.h:276:5: note: template<class _T1, class _T2> constexpr std::pair<typename std::__decay_and_strip<_Tp>::__type, typename std::__decay_and_strip<_T2>::__type> std::make_pair(_T1&&, _T2&&)
make_pair(_T1&& __x, _T2&& __y)
^
/usr/include/c++/4.8/bits/stl_pair.h:276:5: note: template argument deduction/substitution failed:
.build/experimental_trusty/data_provider/Dataserver.cc:112:109: note: cannot convert 'hdl' (type 'websocketpp::connection_hdl {aka std::weak_ptr<void>}') to type 'std::weak_ptr<void>&&'
为什么?如何解决?
您没有向我们展示您的代码,但根据您发布的错误,这是我的猜测。
另外,请更好地研究。我在这个网站上多次看到同样的问题。顺便说一下,本文档提供了有关如何使用该函数的很好示例。
我的猜测是你有这个代码:
auto p = std::make_pair<websocketpp::connection_hdl, std::string>(hdl, str);
这不是调用此函数的正确方法。
事实上,std::make_pair
的存在主要是为了进行模板参数推导。这就是编译器根据发送到函数的参数推断模板参数应该是什么的机制。
例如,如果我写这个:
template<typename T>
void foo(T) {}
我可以这样称呼它:
foo(4.7);
编译器将推断T
double
。
在您的情况下,您应该写下以下内容:
auto p = std::make_pair(hdl, str);
并让扣除发生。