用于覆盖 std::vector::asassign 的模板函数
Template function to override std::vector::assign
我正在编写一个包含成员vector
的C++类。我想覆盖vector
方法,以便MyVector可以像std::vector
一样使用。但是,assign
方法不断引发编译错误:
#include <vector>
template<class T>
struct MyVector {
typedef std::vector<T> vector_type;
vector_type my_vector;
template<class It>
void assign(It first, It last)
{
my_vector.assign<It>(first, last);
}
};
错误:
myvector.cpp: In member function ‘void MyVector<T>::assign(It, It)’:
myvector.cpp:12:22: error: expected primary-expression before ‘>’ token
my_vector.assign<It>(first, last);
此代码在没有外部模板的情况下编译T
.换句话说,通过将向量类型更改为:
typedef std::vector<int> vector_type;
将使编译错误消失,但它不能满足我的需求。
代码是在 Linux (Ubuntu 18( 上编译的,gcc 版本 7.4.0:
gcc 版本 7.4.0(Ubuntu 7.4.0-1ubuntu1~18.04.1(
您需要使用关键字template
来判断assign
是一个模板。
my_vector.template assign<It>(first, last);
// ^^^^^^^^
顺便说一句:std::vector::assign
的模板参数可以自动推导,因此实际上您不需要明确指定模板参数。所以只是
my_vector.assign(first, last);
相关文章:
- 编译器如何区分std::vector的构造函数
- 为什么std::vector和std::valarray初始化构造函数不同
- 字符串化递归的"std::vector<std::vector<...>>"而不使用部分模板函数专用化
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- std::vector 没有重载函数的实例与参数列表匹配
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 创建一个没有复制构造函数的类的 std::vector 的 std::vector
- 为 std::vector 编写自定义插入函数
- 从返回 std::optional of std::vector 的函数中获取结果到调用方
- 将 vector<vector<int>> 传递到函数中会产生内存错误
- 是否可以将具有不同签名的 lambda 存储在 std::vector 中并在函数中执行它们(使用各自的参数)?
- 将 cv::Mat 转换为 std::vector 的通用函数
- 从 std::vector 迭代器中执行函数指针
- C++ std::vector 中的虚拟析构函数继承
- 错误:调用"es_queue::set_rpc_vector(std::vector >&, std::__cxx11::string)"没有匹配函数
- 当我从 std::vector 中的新放置调用析构函数时会发生什么?
- 对于优化级别为 0 的 std::vector,析构函数被调用两次
- push_back std::vector,则重复调用复制构造函数
- 如何在构造函数初始值设定项列表中使用 n 个元素初始化 std::vector<std::time_t>
- 双重调用传递给 std::vector::emplace_back 的类的复制构造函数