gpt4 book ai didi

c++ - 使用 "using"语法将标准容器成员方法引入其子类的范围对运算符不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 11:52:02 26 4
gpt4 key购买 nike

出于某些必要的原因,我已经将一些标准容器子类化,例如 std::vectorprivate继承。

template<typename T>
struct MyVector : private std::vector<T>
{
typedef std::vector<T> vector;

using vector::begin; // ok
using vector::end; // ok
using vector::size; // ok
using vector::operator ==; // <---- error

// Other customized methods
};

大多数时候,using语法用于将这些方法带入子类的范围。
显式重载已完成,仅当我想做一些额外的事情时。

std::vector::operator == 外一切正常未进入范围并给出编译器错误:

error: no members matching MyVector<int>::vector {aka std::vector<int, std::allocator<int> >}::operator== in MyVector<int>::vector {aka class std::vector<int, std::allocator<int>

我尝试用自定义类来模拟这种情况,它 compiles fine .
使用标准容器,compilation fails .

来自浏览源std::vector , 我看到了 operator ==出现在类(class)体内。
带来 operator == 的正确语法是什么?纳入范围MyVector

最佳答案

标准容器中的大多数运算符重载都是非成员,因此您将无法找到它们。

但我会注意到,这(根据我在标准中阅读的内容)并非必须如此。然而,大多数常见的实现似乎都会这样做。如果你想使用 std::vectoroperator== 你可以重载它就像它在标准中定义的那样使用你带来的东西你可以做到像这样:

bool operator == (const MyVector &other) const
{
const std::vector &this_ = *this, &other_ = other;
return this_ == other_;
}

关于c++ - 使用 "using"语法将标准容器成员方法引入其子类的范围对运算符不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17759217/

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