模板类中函数的模板参数
template argument for a function in template class
我有这样的情况
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类型,其中一个或多个模板实参是引用模板形参的表达式。
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类