假设我有以下结构:
struct Parameter {
double value;
double error;
};
所以我通常使用该结构的 vector (即 std::vector<Parameter>
),偶尔我想设置一个 vector 的值(但不是错误) 通过使用 operator=
在该参数 vector 中为方便起见,使用标准的 std::vector。
std::vector<Parameter> vector_of_parameters;
std::vector<double> vector_of values;
....
vector_of_parameters = vector_of_values;
为此,我试图重载 operator=
对于这个结构如下:
std::vector<Parameter> operator=(const std::vector<double>& v) {
this->clear();
for (const auto& i:v) {
Parameter p;
p.value = i;
this->push_back(p);
}
return *this;
}
但这将返回一个错误,提示 std::vector operator=(const std::vector& v) must be a non-static member。因此,如果我理解正确的话,我必须将其定义为运算符的成员函数:
std::vector<Parameter>::operator=(const std::vector<double>& v) {
this->clear();
for (const auto& i:v) {
Parameter p;
p.value = i;
this->push_back(p);
}
return *this;
}
现在的错误是说 syntaxis with template<>,但我没有真正看到它,也没有理解它,也不知道我还能做些什么。
最佳答案
您不能重载 std::vector
的赋值运算符. operator =
必须是一个成员函数,你不能将成员函数添加到 std::vector
.
你可以做的是做一个像create_parameters
这样的便利函数这需要 std::vector<double>
并返回 std::vector<Parameter>
.看起来像
std::vector<Parameter> create_parameters(std::vector<double> const& params)
{
std::vector<Parameter> ret(params.size());
std::transform(params.begin(), params.end(), ret.begin(),
[](auto value) { return Parameter{value, 0}; });
return ret;
}
然后
vector_of_parameters = vector_of_values;
会变成
vector_of_parameters = create_parameters(vector_of_values);
关于c++ - 为类 std::vector<> 的结构成员重载 operator=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54200865/