如何在构造函数中使用变量参数列表时捕获错误?

时间:2013-09-23 00:21:13

标签: c++ constructor argument-passing

我有一个带有变量参数列表的构造函数。它工作正常。除非有人输入了错误数量的参数,否则它会变得狂暴。我怎么能在他们这样做时抓住?由于程序信任用户输入正确数量的变量,我不确定。

VecXd.hpp:

#ifndef JF_VecXd
#define JF_VecXd

#include <iostream>
#include <stdarg.h>

template <class T>
class VecXd{
    public: 
        VecXd(int num, ...);   
        void display();


        private:
            int size;
            T * elements;

};

template <class T> 
VecXd<T>::VecXd(int num, ...):size(num){
    va_list argP; 
    va_start(argP, num);
    elements = new T[size];
    for(int n = 0; n < size; n++)
        elements[n] = va_arg(argP,T);
    va_end(argP);
}

template <class T>
void VecXd<T>::display(){
    std::cout << "Vector size is " << size << "\n";
    for(int n = 0; n < size; n++)
        std::cout << "element " << n << ": " << elements[n] << "\n";
}  

#endif

vTest.cpp:

#include "vecxd.hpp"
#include <iostream>

int main(){

    VecXd<int> v2(5,1,2,3,4,5);    // correct number of args
    VecXd<int> v1(8,1,2,3,4,5);    // incorrect number of args
                                  //I don't know how to catch this error


    std::cout << "Vector 1:" << std::endl; 
    v1.display();

    std::cout << "Vector 2:" << std::endl; 
    v2.display();

    return 0;
}

0 个答案:

没有答案