下面的代碼不能編譯。第14和15行是問題,我不知道如何解決它。如何修改模板函數以運行這個小例子?嵌套的模板和模板推斷錯誤
我的編譯器說:
error: no matching function for call to 'make'
和
note: candidate template ignored: couldn't infer template
argument 'CONTAINER'
編譯此代碼:
#include <vector>
template <typename TYPE>
struct Node
{
Node(TYPE & _value) : value(_value) {};
TYPE value;
typename std::vector<Node<TYPE>>::const_iterator first, last;
};
template < template <typename, typename...> class CONTAINER
, typename TYPE
, typename... ARGS >
Node<TYPE> & make (Node<TYPE> & _node
/* not correct */ , typename CONTAINER<TYPE, ARGS...>::const_iterator _first
/* not correct */ , typename CONTAINER<TYPE, ARGS...>::const_iterator _last
, unsigned _k)
{
if (std::distance(_first,_last) < _k)
{
_node.first = _first;
_node.last = _last;
}
return _node;
}
int main()
{
unsigned k = 3;
std::vector<int> dataset;
int i = 4;
Node<int> node(i);
node = make(node, dataset.begin(), dataset.end(), k);
}
這很令人困惑:'Node'包含一個從'dataset.begin()'分配''的矢量> const_iterator'',但'dataset'是'vector '而不是'矢量>'。這些如何兼容? –