overloading [] and , c++11
overloading [] and , c++11
假设我们有这个表达式
auto x =Object.operator[][1,2,3,4];
我希望我的C++代码将数字 1 2 3 4 插入到位于我的代码下面的对象内的向量中。
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;
}
多亏了你们,我接近我正在寻找的答案。例如,如何将 [] 中包含的所有值添加到某个向量中,并将其发送到列表并添加到其向量中。逗号运算符会重载,但我不知道怎么做。据我所知,我可以理解的是,我必须在 1 之前放置一个对象,并且将调用重载的逗号,但我不能做任何其他特殊语法 that.is 可以调用它。
在不重载逗号的情况下执行此操作的一种可能的、直接的方法是:
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;
}
一些值得注意的变化:
- 类成员可见性
- 运算符 [] 更通用并返回引用
- 调用方通过引用接受
我知道您想在 C++中使用 [] 运算符将数字列表插入到对象的向量中。
如果是这种情况,您可以使用 C++11 的隐式转换。下面是一个示例代码:
class Object
{
public:
Object operator[]( vector<int> vx )
{
v.insert( v.end(), vx.begin(), vx.end() );
return *this;
}
private:
vector<int> v;
};
这样您就可以使用:
Object o;
o[{1, 2, 5}];
将列表"1、2、5"轻松插入到对象的向量中。{1, 2, 5} 将被隐式转换为整数向量,并且将调用并执行您的自定义 [] 运算符函数。
operator[](int)
是一个二元运算符。不能重载以接受超过 1 个索引参数。
这里有一些工作示例:
#include <iostream>
#include <vector>
using namespace std;
class Object{
public:
Object operator[](int temp){
this->x.push_back(temp);
return *this;
}
vector<int> x;
};
int main() {
auto x = Object();
x[1];
x[2];
x[3];
return 0;
}
相关文章:
- overloading [] and , c++11
- wxWidgets 3.1.0 and Mac OS X El Capitan (10.11)
- C 11构造函数参数:std ::移动和值或std :: forward and rvalue参考
- Qt 5.0 and c++11 with OSX Mountain Lion
- g++ (MinGW), C++11 and SSE
- Travis CI with Clang 3.4 and C++11
- C 11 std :: bind and auto的编译错误,用于回调函数参数
- char16_t and char32_t types in C++11
- Eigen and MKL 11.2
- Emacs, cedet and c++/c++11 support
- Qt Slots and C++11 lambda
- C++11 on MicroVision 5.13 and ARMCC 5.05
- C++11 and Win32 wchar_t
- RTTI support for C++11 ( _CPPRTTI and __GNUG__ )
- C++11 lvalue, rvalue and std::move()
- C++11 auto and size_type
- WPF and DirectX 11 via D3DImage
- DirectX 11 and FreeType
- c++11 and boost geometry
- C++11 and if(integer)