gpt4 book ai didi

c++ - 覆盖 std::vector::assign 的模板函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:50:25 25 4
gpt4 key购买 nike

我正在编写一个包含成员 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 的情况下编译。换句话说,通过将 vector 类型更改为:

typedef std::vector<int> vector_type;

将使编译错误消失,但它不能满足我的需求。

代码在 Linux (Ubuntu 18) 上编译,gcc 版本为 7.4.0:

gcc version 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);

关于c++ - 覆盖 std::vector::assign 的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57618810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com