用于覆盖 std::vector::asassign 的模板函数

Template function to override std::vector::assign

本文关键字:函数 vector 覆盖 std 用于 asassign      更新时间:2023-10-16

我正在编写一个包含成员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);