gpt4 book ai didi

c++ - 重载 [] 和 , c++11

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

假设我们有这个表达式

auto x =Object.operator[][1,2,3,4];

我希望我的 C++ 代码将数字 1 2 3 4 插入到位于我的代码下方的对象内部的 vector 中。

class Object{
Object operator[](int temp){
this->x.push_back(temp);
return *this;
}
vector<int> x;
};
int main()
{
auto x =Object().operator[][1,2,3,4];

return 0;
}

此代码无法编译。据我所知,我必须重载逗号和 [],但我不知道该怎么做。我是 C++ 的新手。

编辑额外问题。!!!!!!!!!!!!!!!!!!!!!!!!

检查下面的代码,这是我的更新。

#include <iostream>

using namespace std;
class List{
public:
List(){}
List(int a){
x.push_back(a);
}
~List(){}
int operator[](int a){

return a;
}
const char* operator[](const char * a){
return a;
}

vector <int> x;
};
int main()
{
List x = List{}[1,2,3,4];


return 0;
}

谢谢你们,我已经接近我正在搜索的答案了。我如何将 [] 中包含的所有值添加到某个 vector 中,例如并将其发送到列表并添加到它的 vector 中。逗号运算符将被重载但我不知道怎么做。据我所知和我能理解的是我必须在 1 之前放置一个对象并且将调用重载的逗号但我不能那样做。是否有任何其他特殊语法可以调用它。

最佳答案

在没有逗号重载的情况下,一种可能的、直接的方法是:

class Object
{
public:
template<typename Numbers = std::initializer_list<int>>
Object &operator[](const Numbers &numbers)
{
std::copy(std::begin(numbers), std::end(numbers), std::back_inserter(x_));
return *this;
}

private:
std::vector<int> x_;
};
int main()
{
Object object;
auto &obj = object[{1,2,3,4}];
std::vector<int> numbers = {1, 2, 3, 4};
obj = obj[numbers];
return 0;
}

一些值得注意的变化:

  • 类(class)成员可见性
  • operator[] 更通用并返回一个引用
  • 调用者通过引用接受

关于c++ - 重载 [] 和 , c++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48038037/

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