模板类中函数的模板参数

template argument for a function in template class

本文关键字:参数 函数      更新时间:2023-10-16

我有这样的情况

template<class T> class Vector {
  T *data;
  uint _size, _counter;
public:
  class Iterator;
  template<template<class> class C> Vector(typename C<T>::Iterator it1,
                                           typename C<T>::Iterator it2) {
    data = NULL;
    _size = _counter = 0;
    for(typename C<T>::Iterator it = it1; it != it2 && it != end(); it++)
      push(*it);
  }
};

是我自己的Vector类,构造函数模仿Vector的行为(你可以用使用interators提供的数据范围构造它),但增加了容器必须是与正在构造的模板相同类型的要求。得到error

5.cpp:16:36:错误:没有匹配函数调用' Vector::Vector(Vector::Iterator, Vector::Iterator) '5.cpp:16:36:注:候选人是:In file included from 5.cpp:2:0:

5.hpp:17:37:注:模板类typepedef C C> Vector::Vector(typename C::Iterator, typename C::Iterator)

5.hpp:17:37:注意:模板参数演绎/替换失败:

5.cpp:16:36:注意:无法推断模板参数' template class typepedef C C ' In file included from 5.cpp:2:0:

5.高压泵:11:3:注意:向量:向量()(T = int)

5.hpp:11:3:注意:候选人期望0个参数,提供2个

5.hpp:7:25; note: Vector::Vector(const Vector&)

5.hpp:7:25:注意:候选人期望1个参数,提供2

这里需要帮助

In:

 template<template<class> class C> Vector(typename C<T>::Iterator it1,
                                           typename C<T>::Iterator it2) 

编译器不会从typename C<T>::Iterator中推断出类型C,因为它是所谓的非推断上下文

参见§14.8.2.4从类型[temp.演绎.type]推导模板参数:

4未推断的上下文是:

-使用限定id指定的类型的嵌套名称说明符。

—模板id类型,其中一个或多个模板实参是引用模板形参的表达式。