Переопределение глобального оператора C ++ через запятую дает ошибку - PullRequest
1 голос
/ 09 марта 2010

вторая функция выдает ошибку C2803 http://msdn.microsoft.com/en-us/library/zy7kx46x%28VS.80%29.aspx: «оператор» должен иметь хотя бы один формальный параметр типа класса. какая-нибудь подсказка?

template<class T,class A = std::allocator<T>> 
class Sequence : public std::vector<T,A> {
 public:
    Sequence<T,A>& operator,(const T& a) {
        this->push_back(a);
        return *this;
    }
    Sequence<T,A>& operator,(const Sequence<T,A>& a) {
        for(Sequence<T,A>::size_type i=0 ; i<a.size() ; i++) {
            this->push_back(a.at(i));
        }
        return *this;
    }
};

//this works!
template<typename T> 
Sequence<T> operator,(const T& a, const T&b) {
    Sequence<T> seq;
    seq.push_back(a);
    seq.push_back(b);
    return seq;
}

//this gives error C2803!
Sequence<double> operator,(const double& a, const double& b) {
    Sequence<double> seq;
    seq.push_back(a);
    seq.push_back(b);
    return seq;
}

Ответы [ 2 ]

3 голосов
/ 09 марта 2010

В C ++ вы не можете перегрузить оператор, если хотя бы один из его параметров не является классом, сделанным на заказ, или чем-то не таким примитивным, как enum. Вы не можете перегружать + для int типов и, аналогично, вы не можете перегружать , для double типов.

2 голосов
/ 09 марта 2010

Измените это на:

Sequence<double> operator,(const Sequence<double>& a, const double& b)
{
    Sequence<double> seq(a);
    seq.push_back(b);
    return seq;
}

или (на основании этой статьи ):

Sequence<double> operator,(Sequence<double> seq, const double& b)
{
    seq.push_back(b);
    return seq;
}
...