如何重载>>运算符来获取变量参数列表

Sem*_*ide 2 c++ operator-overloading

我想重载'>>'运算符,以便有人可以输入任意数量的值.

这是我正在进行的任务中的要求verbatum:

运算符>>应该期望以下列形式看到输入:d v1 v2 ... vd,其中d是向量的维数,每个vi是对应于向量中索引i的值.

我认为它的工作方式是第一个值是数组的大小(包含在对象Vex中),其余的将是元素.所以,如果他们要输入

Vex vX;
4, 1, 2, 3, 4 >> vX; 
Run Code Online (Sandbox Code Playgroud)

vX将创建一个大小为4的动态数组,其中包含数字1-4.

我挂断的主要部分是如何编程>>重载,因为会有可变数量的参数.

理想情况下,我会有一个解决...的效果(这只是一个例子):

std::istream& Vex::operator>>(istream& is, const Vex&){
   /*
     Assume int * data has been previously declared in constructor
     data = new int[iterator[0]]
     create iterator of input for istream
     For n from 1 to iterator[0]...
         data[n] = iterator[n] 
   */
}
Run Code Online (Sandbox Code Playgroud)

我只是不知道该怎么做.我一直在环顾四周,我找到了istream_iterator,但我找不到有人使用它的方式我需要使用它的任何好例子.

我希望我提供的信息足以回答这个问题.如果没有,请告诉我.

非常感谢您的宝贵时间.

Ben*_*ley 8

您的老师并没有要求您重载operator>>以获取可变参数列表.他要求你以operator>>这样的方式重载,它在运行时解析变量长度输入,由用户(或文件或任何istream对象)给出.您需要的签名是:

std::istream& operator>>(istream& is, Vex& v)
Run Code Online (Sandbox Code Playgroud)

它不应该是成员函数,但您可能需要它成为朋友.

我对这个Vex类一无所知,所以我不能告诉你如何编写这个函数,但它会是这样的:

read an integer N from the stream
set size of Vex object as N, however that's done
for i = 1 to N
    read number X from the stream
    store X in Vex object at position i
Run Code Online (Sandbox Code Playgroud)