vector的at();能取到数据。或者[]也可以。我想在at()后面加上AsString、AsInteger和AsBoolean
[]也一样。我应该怎么做呢?当然,不能影响原来的at和[]

解决方案 »

  1.   

    template<class _T>
    class myvector: public vector<_T>
    {
    public:
    bool AsBool(int i){return (operator [](i) != 0);};
    };
    myvector<int> mv;
    mv.push_back(11);
    ASSERT(mv.AsBool(0) == true);
      

  2.   

    没有听懂你的意思 你不说不要改变vector原有的功能吗?
    如果你自己写一个vector 只要实现了原有的接口并且一样的效果 套用到上面当然也可以
    但是包含文件就不能是STL的<vector>而是你自己的咯 不然就不知道vector该用哪一个了
    那样就等于你直接修改STL带的代码
      

  3.   

    我的意思是能不能不修改vector这个类,通过其它方法把功能给加上去。并且使用时候还是以原来的形式一样
    vector<**> ***来声明只是多了我加上去的几个方法按照你1楼的方法,我声明时需要myvector <**> ***来使用了
      

  4.   

    那你就修改vector这个头文件吧,如果有勇气的话。其实重载的话就要用重载后的类型,怎么可能还用原来的类型?
      

  5.   

    从语法生讲,不要去派生stl的类,除非你知道这么做的后果从设计上讲,没有必要把asstring之类的函数作为成员函数,因为他的语义不局限于vector。
    作为一个模板函数就可以了,对各种类型做特化
      

  6.   

    直接修改会有一定的风险,因为你修改了编译器的模版实现等,
    自己用模版等方式实现好了,在vector上面再包一下..j
    既然是自己增加的方法,就应该自己使用,而不是影响别人使用vector