以下のコードはコンパイルされません。 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'は、' make() 'が' dataset.begin() 'から割り当てようとしている'ベクトル :: const_iterator'を含んでいますが、 'dataset'は'ベクトル 'ベクター> '。これらはどのように互換性がありますか? –