注册 登录
编程论坛 C++教室

求大佬解决问题。

复旦 发布于 2018-10-30 23:25, 1298 次点击
下面是矢量类的构造函数  。可以接受N个double型参数。

myvector(int count,...)    //N参数构造函数
    {
        N=count;
        element=new double[N];              
        va_list ap;
        va_start (ap,count);
        for (int i=0;i<N;i++)
        {
            element[i]=va_arg(ap,double);
        }
        va_end(ap);
    }

但是如果 Vector a(3,2,3,4);这样写的话,
因为2,3,4编译器识别为int型数据,所以构造函数里不会执行赋值代码。
有能让构造函数接受N个double或int型参数后进行赋值的方法吗?
5 回复
#2
rjsp2018-10-31 10:03
为什么要用 可变参数函数 呢,
为什么不用 std::initializer_list 呢?
#3
复旦2018-10-31 13:04
我用xshell软件在Linux服务器上用vim编辑器写代码。
C11的新的东西vim支持吗?
#4
复旦2018-10-31 13:09
还有,用了std::initializer_list,好像也只能接受一种类型的数据,不能解决问题。
#5
Jonny02012018-11-01 18:51
程序代码:
#include <iostream>

using namespace std;
double arr[N] {0};        //N 为 count 的输入值, 这里作为伪代码
size_t _index {0};        //arr 的数组下标, 从 0 开始, 最大到 N - 1
//处理不同类型的可变参数
template <typename T>
void add_to_arr(T &&t) {
    arr[_index++] = static_cast<double>(t);
}
template <typename T, typename ...Args>
void add_to_arr(T &&t, Args &&...args) {
    arr[_index++] = static_cast<double>(t);
    add_to_arr(std::forward<Args>(args)...);
}
int main(int argc, char *argv[]) {
    add_to_arr(1ul, 2l, 3.7f, 's', 9, 111ll);
    for(auto i {0}; i < _index; ++i) {
        cout << arr[i] << endl;
    }
}
#6
Jonny02012018-11-01 18:52
回复 4楼 复旦
看我上面这个例子, 你可以仿照我这个将你的改一下
1